Un recipiente con la mayor cantidad de agua por día (código leet) (puntero doble)

Contenedor con la mayor cantidad de agua (doble puntero)

11. Contenedor con la mayor cantidad de agua.

Dificultad media 1342 Compartir colección Cambiar a inglés Seguir comentarios

Se le dan n enteros no negativos a 1, a 2, ..., an , 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 recipiente 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.

img

La línea vertical en la figura representa la matriz de entrada [1,8,6,2,5,4,8,3,7]. En este caso, el valor máximo que el recipiente puede contener agua (representado por la parte azul) es 49.

Ejemplos:

输入:[1,8,6,2,5,4,8,3,7]
输出:49

Respuesta:

class Solution:
    def maxArea(self, height: List[int]):
        vol=0
        leng=len(height)
        l,r=height[0],height[leng-1]
        nl,nr=0,leng-1
        for i in range(leng-1):
            mi=min(l, r)
            vol = max(mi*(leng-i-1),vol)
            if mi==l:
                nl+=1
                l=height[nl]
            else:
                nr-=1
                r=height[nr]
        return(vol)

Práctica de resolución:

Después de leer la pregunta, lo primero que pensé fue en el doble bucle, pero me pareció muy problemático, así que establecí un curso diferente. Puede que haya hecho esa pregunta o me hayan enseñado en una clase de algoritmos antes, y siempre me siento un poco impresionado.

Pensé en moverme en ambos lados, simplemente seleccionando un lado pequeño para mover, así que la forma correcta es él ...

Defina dos variables de límite r y l, y el ciclo se moverá hacia el medio. En el proceso, compare los dos volúmenes vol y seleccione un valor grande y luego asígnelo a vol. El límite se actualiza después de cada ciclo, y la regla de actualización selecciona el límite más pequeño para moverse hacia adentro.

En cuanto a por qué desea mover el lado pequeño, consulte aquí

image-20200418164303414

Supongo que te gusta

Origin www.cnblogs.com/rower/p/12726652.html
Recomendado
Clasificación