Categorías
Algorithms Interview

LeetCode – Cuadrado máximo (Java)

Dada una matriz binaria 2D llena de ceros y unos, encuentre el cuadrado más grande que contenga todos unos y devuelva su área.

Por ejemplo, dada la siguiente matriz:

1101
1101
1111

Regresar 4.

Análisis

Este problema puede resolverse mediante programación dinámica. La condición cambiante es:
t[i][j] = min (t[i][j-1], t[i-1][j], t[i-1][j-1]) + 1. Significa el cuadrado formado antes de este punto.

Solución Java

public int maximalSquare(char[][] matrix) {
    if(matrix==null||matrix.length==0){
        return 0;
    }
 
    int result=0;
    int[][] dp = new int[matrix.length][matrix[0].length];
 
    for(int i=0; i<matrix.length; i++){
        dp[i][0]=matrix[i][0]-'0';
        result=Math.max(result, dp[i][0]);
    }
 
    for(int j=0; j<matrix[0].length; j++){
        dp[0][j]=matrix[0][j]-'0';
        result=Math.max(result, dp[0][j]);
    }
 
    for(int i=1; i<matrix.length; i++){
        for(int j=1; j<matrix[0].length; j++){
            if(matrix[i][j]=='1'){
                int min = Math.min(dp[i-1][j], dp[i][j-1]);
                min = Math.min(min, dp[i-1][j-1]);
                dp[i][j]=min+1;
 
                result = Math.max(result, min+1);
            }else{
                dp[i][j]=0;
            }    
        }
    }
 
    return result*result;
}

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 *