LeetCode Pregunta Notas Pregunta 11: El recipiente que contiene la mayor cantidad de agua

Tema Descripción

Dada una altura de matriz entera de longitud n. Hay n rectas verticales, y los dos extremos de la i-ésima recta son (i, 0) e (i, altura[i]).

Encuentra dos de estas líneas tales que, junto con el eje x, formen un recipiente que contenga la mayor cantidad de agua.

Devuelve la máxima cantidad de agua que puede almacenar el contenedor.

Fuente: LeetCode
Enlace: https://leetcode.cn/problems/container-with-most-water

Ejemplo 1:
inserte la descripción de la imagen aquí
Entrada: [1,8,6,2,5,4,8,3,7]
Salida: 49
Explicación: La línea vertical en la figura representa la matriz de entrada [1,8,6,2,5, 4,8,3,7]. En este caso, la cantidad máxima de agua que puede contener el recipiente (que se muestra en azul) es 49.

Ejemplo 2:
Entrada: altura = [1,1]
Salida: 1

ideas para resolver problemas

Primero analiza el problema, cuando hay más agua es cuando el largo multiplicado por el ancho es mayor, el largo se refiere a la distancia del subíndice del arreglo, y el ancho se refiere al lado más corto de los dos lados, esto El problema se puede resolver utilizando el método de doble puntero. No se pierda la situación óptima, la izquierda y la derecha se mueven desde ambos lados hacia el centro respectivamente, y solo pueden moverse un espacio a la vez. Al mismo tiempo, compare los valores. ​a la izquierda y a la derecha, y la del otro lado es más pequeña y la del otro lado sigue moviéndose. hasta que los punteros izquierdo y derecho sean iguales.

código completo

public class Solution {
    
    
    public int MaxArea(int[] height) {
    
    
            if (height.Length==2)
            {
    
    
                return 1*Math.Min(height[0], height[1]);
            }
            int left = 0;
            int right = height.Length-1;
            int maxArea = 0;
            while (left<right)
            {
    
    
                int area = (right-left)* Math.Min(height[left], height[right]);
                if (height[left]<height[right])
                {
    
    
                    left++;
                }
                else if (height[left]>height[right])
                {
    
    
                    right--;
                }
                else
                {
    
    
                    left++;
                    right--;
                }

                maxArea= maxArea>area ? maxArea : area;
            }
            return maxArea;
    }
}

Estudia mucho y progresa todos los días.

Supongo que te gusta

Origin blog.csdn.net/u012869793/article/details/131379187
Recomendado
Clasificación