Doble puntero: el contenedor que contiene la mayor cantidad de agua (4.18 leetcode una pregunta por día)

Se le dan n enteros no negativos a1, a2, ..., an, y cada número representa un punto (i, ai) en coordenadas. Dibuje n líneas verticales en las coordenadas. Los dos puntos finales de la línea vertical i son (i, ai) y (i, 0). Encuentre dos de las líneas para que el contenedor que forman con el eje x pueda contener la mayor cantidad de agua.
Nota: No puede inclinar el contenedor, y el valor de n es al menos 2.

Ejemplos:

Entrada: [1,8,6,2,5,4,8,3,7]
 Salida: 49 
Idea: Doble puntero, vea que el código es claro y fácil de entender
1  int maxArea (vector < int > & height) 
 2      {
 3          int res = 0 ;
4          int i = 0 ;
5          int j = height.size () - 1 ;
6  
7          while (i < j)
 8          {
 9              int area = (ji) * min (altura [i], altura [j]);
10              res = max (área, res);
11              if (altura [i] < altura [j])
 12              {
 13                 i ++ ;
14              }
 15              más 
16              {
 17                  j-- ;
18              }
 19          }
 20          retorno res;
21      }

 




 

Supongo que te gusta

Origin www.cnblogs.com/ZhengLijie/p/12724121.html
Recomendado
Clasificación