[Diario de preguntas de pincel] 11. El recipiente que contiene más agua

Llega oferta, cava amigos a recoger! Estoy participando en el evento de registro de reclutamiento de primavera de 2022, haga clic para ver los detalles del evento .

[Diario de preguntas de pincel] 11. El recipiente que contiene más agua

El decimotercer capítulo de este diario de escritura se titula: 11. El recipiente que más agua contiene , mediano

1. Descripción del tema:

¿Cómo se siente recibir esta pregunta?

Hay pocas palabras en la descripción del título, y parece ser bastante claro. ¿No es solo para calcular la cantidad máxima de agua que puede contener el recipiente, pero siento que cuanto más claro es el título, más confuso? será para darse cuenta?

Está bien chicos, juguemos y analicémoslo.

2. Análisis del pensamiento:

1. ¿Qué idea examina esta pregunta? ¿Cuál es tu pensamiento?

Echemos un vistazo a la información importante que nos da esta pregunta:

  • Se dará una matriz en la pregunta, y el número de elementos en esta matriz es 2 - 10 elevado a la quinta potencia, lo que significa que no necesitamos juzgar si la longitud de la matriz de entrada es menor que 2.
  • Convierta la matriz en un contenedor, calcule el ancho y la altura, y obtenga la cantidad máxima de agua que el contenedor puede contener

Esto es un poco como el efecto barril , la cantidad de agua que puede contener un barril depende de la tabla más corta, y aquí, la cantidad de agua que puede contener un recipiente depende de 2 variables

  • la altura del contenedor
  • el ancho del contenedor

La necesidad combinada de lograr la altura del contenedor * el ancho del contenedor es el más grande

Así que deduzcamos:

Ejemplo dado usando el título : [1,8,6,2,5,4,8,3,7]

Para esta pregunta, queremos calcular el tamaño máximo de agua que puede contener el recipiente, por lo que podemos usar una caja para hacer una selección de caja. ¿Harías una selección de caja como esta? Expanda de izquierda a derecha a la derecha para hacer una selección de cuadro

Tome la primera columna como estándar y expanda a la derecha

Omitir los siguientes pasos...

Tome la segunda columna como criterio y expanda a la derecha

Omitir los siguientes pasos...

De acuerdo con el método anterior, es posible encontrar la cantidad máxima de agua que esperamos encontrar , pero la complejidad de tiempo de este método es demasiado alta e inevitablemente se agotará el tiempo.Podemos cambiar nuestra forma de pensar.

Dado que se trata de encontrar la cantidad máxima de agua, ¿podemos comenzar desde el límite de datos que puede ser el más grande? No podemos controlar la altura de la columna, pero podemos controlar el ancho del contenedor

Por lo tanto, podemos encontrar

  • Directamente desde la columna más a la izquierda y la columna más a la derecha como el borde del contenedor para reducirse continuamente hasta el centro
  • Cuando necesite plegarse, comience por el lado más corto , para que sea más fácil de entender y la cantidad de ciclos se pueda reducir considerablemente.

La figura anterior ha simulado claramente el proceso de cierre de límites, y el resto es que realizaremos las ideas anteriores juntos, utilizando el método de doble puntero.

3. Codificación

De acuerdo con la lógica y el análisis anteriores, podemos traducirlo al siguiente código. De acuerdo con el significado de la pregunta, no necesitamos juzgar si la longitud de la matriz dada es menor que 2.

La codificación es la siguiente:

func maxArea(height []int) int {
	// 赋初始值,定位容器的左边界和右边界 (双指针的方法)
    i , j := 0,len(height) - 1

    res := 0
    for i<j {
        // 计算当前边界的容器面积,取决于较矮的一边
        res = max(res,(j-i) * min(height[i],height[j]))
		// 从较短的那一边开始收拢
        if height[i] < height[j]{
            i++
        }else{
            j--
        }
    }
    return res
}

func max(a,b int)int{
    if a>b {
        return a
    }
    return b
}

func min(a,b int)int{
    if a<b {
        return a
    }
    return b
}
复制代码

Lo anterior es el código implementado de acuerdo con la idea. La idea es clara. La codificación es un proceso de traducción. Teniendo en cuenta varios escenarios, podemos implementarlo de manera más fluida, lo que puede reducir el riesgo de reelaboración y errores.

4. Resumen:

Aquí solo necesitamos recorrer todo el arreglo una vez, la complejidad del tiempo es O(n) y la complejidad del espacio es O(1), porque todos usamos un consumo de espacio de nivel constante

Dirección del título original: 11. El recipiente que contiene más agua

Estoy aquí hoy, lo que he aprendido, si hay alguna desviación, corríjame

Bienvenido a me gusta, seguir, favorito

Amigos, su apoyo y aliento son la motivación para que yo persista en compartir y mejorar la calidad.

Bien, aquí está esta vez.

La tecnología es abierta, y nuestra mentalidad debe ser abierta. Acepta el cambio, vive bajo el sol y sigue adelante.

Soy el pequeño demonio Nezha , bienvenido a dar me gusta, seguir y coleccionar, hasta la próxima ~

Supongo que te gusta

Origin juejin.im/post/7079697653612838948
Recomendado
Clasificación