Categorías
Algorithms

LeetCode: número de submatrices con máximo acotado (Java)

Se nos da una matriz A de enteros positivos y dos enteros positivos L y R (L <= R).

Devuelve el número de subarreglos (contiguos, no vacíos) de modo que el valor del elemento de arreglo máximo en ese subarreglo sea al menos L y como máximo R.

Ejemplo :
Aporte:
A = [2, 1, 4, 3]

L = 2
R = 3
Salida: 3
Explicación: hay tres submatrices que cumplen los requisitos: [2], [2, 1], [3].

Solución Java

El límite de este problema es para cada elemento, no para la suma. Es fácil malinterpretar el problema, ya que hay muchas preguntas relacionadas con la suma.

Dada la matriz en la muestra [2,1,4,3], podemos convertirlo en una matriz [0,0,1,0], lo que significa que si el elemento está dentro del límite, es 0. Luego contamos el número de subarreglos.

Dada una matriz, el número total de submatriz sigue el siguiente patrón:

[0]       -> 1
[0,0]     -> 2 + 1 (single-element subarray + 2-element subarray)
[0,0,0]   -> 3 + 2 + 1
[0,0,0,0] -> 4 + 3 + 2 + 1

Por lo tanto, la solución es countBelowBoundary de R – countBelowBoundary of (L-1).

public int numSubarrayBoundedMax(int[] A, int L, int R) {
    return countBelowBoundary(A, R)-countBelowBoundary(A,L-1);
}
 
public int countBelowBoundary(int[] A, int bound){
    int count = 0;
    int temp = 0;
 
    for(int a: A){
        if(a<=bound){
            temp = temp +1;
            count += temp;
        }else{
            temp = 0;
        }
    }
    return count;
}

El tiempo es O (N) y el espacio es O (1).

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *