LeetCode Brushing Notes_42. Recibir lluvia

El tema es de LeetCode

Se puede acceder a otras soluciones o código fuente: tongji4m3

descripción

Dado n números enteros no negativos que representan el mapa de altura de cada columna con un ancho de 1, calcule cuánta agua de lluvia pueden recibir las columnas dispuestas de esta manera.

Lo anterior es el mapa de altura representado por la matriz [0,1,0,2,1,0,1,3,2,1,2,1]. En este caso, 6 unidades de lluvia (azul Parte significa lluvia).

Ejemplo:

输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6

Ideas

Encuentra la posición más alta a la izquierda: atraviesa de izquierda a derecha

Encuentra la posición más alta a la derecha: atraviesa de derecha a izquierda

Encuentre la altura más alta a la izquierda y la altura más alta a la derecha de cada ubicación, y tome la más pequeña, la altura de esa ubicación. Esa es el agua de lluvia en esa ubicación

Acumula el agua de lluvia recolectada en cada lugar

Código

public int trap(int[] height)
{
    
    
    int n = height.length;
    if (n <= 2) return 0;//接不了雨水
    int[] left = new int[n];
    int[] right = new int[n];

    left[0] = height[0];
    for (int i = 1; i < n; i++) left[i] = Math.max(left[i - 1], height[i]);

    right[n - 1] = height[n - 1];
    for (int i = n - 2; i >= 0; i--) right[i] = Math.max(right[i + 1], height[i]);

    int result = 0;

    for (int i = 0; i < n; i++) result += (Math.min(left[i], right[i]) - height[i]);
    return result;
}

Análisis de complejidad

complejidad del tiempo

O (N) O (N) O ( N ) , tres ciclos, cada vez requiere N, un total de 3N

Complejidad espacial

O (N) O (N) O ( N ) , defina dos matrices de tamaño N, el espacio total requerido es 2N

Supongo que te gusta

Origin blog.csdn.net/weixin_42249196/article/details/108163112
Recomendado
Clasificación