Descripción del problema
Cuánta agua puede pesar el contenedor como máximo, debido a que la altura del contenedor es una matriz, podemos atravesar la matriz y calcular la capacidad de agua de cada cuadrícula, y sumar la capacidad de agua más alta.
Ejemplo
Ejemplo 1
Ingrese
[3,1,2,5,2,4]
Salida
5
Soluciones
análisis
- Cuánta agua puede pesar el contenedor como máximo, debido a que la altura del contenedor es una matriz, podemos atravesar la matriz y calcular la capacidad de agua de cada cuadrícula, y sumar la capacidad de agua más alta.
método
- Solución violenta: atraviesa los elementos, según el elemento actual, encuentra la altura más alta leftHeight a la izquierda, encuentra la altura más alta rightHeight a la derecha y calcula la capacidad de agua de la cuadrícula actual: agua = min (leftHeight, rightHeight) - curHeight
- Método de doble puntero: comience a buscar desde los lados izquierdo y derecho al mismo tiempo, encuentre la altura más alta respectivamente, compare la altura de los lados izquierdo y derecho, tome la altura más baja, calcule la capacidad de agua, luego elimine la cuadrícula actual y Continúe el cálculo. (Nota: No es posible calcular ambos lados al mismo tiempo aquí, porque obtenemos la altura baja y la altura alta causará fugas de agua)
// 过程:
第0次循环:lmax = 3、rmax = 4
第0列的盛水量:0
第1次循环:lmax = 3、rmax = 4
第1列的盛水量:2
第2次循环:lmax = 3、rmax = 4
第2列的盛水量:1
第3次循环:lmax = 3、rmax = 4
第5列的盛水量:0
第4次循环:lmax = 5、rmax = 4
第4列的盛水量:2
第5次循环:lmax = 5、rmax = 4
第3列的盛水量:0
Código
// 思路2
public class Solution {
public long maxWater (int[] arr) {
// write code here
if(arr==null || arr.length==0) return 0L;
long ans = 0;
int l=0, r=arr.length-1;
int lmax = arr[0], rmax=arr[arr.length-1];
while(l<=r) {
lmax = Math.max(arr[l], lmax);
rmax = Math.max(arr[r], rmax);
if(lmax < rmax) {
ans += lmax - arr[l];
l++;
} else {
ans += rmax - arr[r];
r--;
}
}
return (long) ans;
}
}
Análisis de complejidad de tiempo:
O (N): atraviesa la matriz
Análisis de complejidad del espacio:
O (1): No se utiliza espacio adicional
Si quieres hacer la prueba, puedes ir directamente al enlace de Niuke.com para hacer la prueba