Categorías
Algorithms

LeetCode – Paint House II (Java)

Hay una hilera de n casas, cada casa se puede pintar con uno de los k colores. El costo de pintar cada casa con un color determinado es diferente. Tienes que pintar todas las casas de manera que no haya dos casas adyacentes del mismo color.

El costo de pintar cada casa con un color determinado está representado por una matriz de costos ansk. Por ejemplo, costos[0][0] es el costo de pintar la casa 0 con el color 0; costos[1][2] es el costo de pintar la casa 1 con el color 2, y así sucesivamente … Encuentre el costo mínimo para pintar todas las casas.

Solución Java

public int minCostII(int[][] costs) {
    if(costs==null || costs.length==0)
        return 0;
 
    int preMin=0;
    int preSecond=0;
    int preIndex=-1; 
 
    for(int i=0; i<costs.length; i++){
        int currMin=Integer.MAX_VALUE;
        int currSecond = Integer.MAX_VALUE;
        int currIndex = 0;
 
        for(int j=0; j<costs[0].length; j++){
            if(preIndex==j){
                costs[i][j] += preSecond;
            }else{
                costs[i][j] += preMin;
            }
 
            if(currMin>costs[i][j]){
                currSecond = currMin;
                currMin=costs[i][j];
                currIndex = j;
            } else if(currSecond>costs[i][j] ){
                currSecond = costs[i][j];
            }
        }
 
        preMin=currMin;
        preSecond=currSecond;
        preIndex =currIndex;
    }
 
    int result = Integer.MAX_VALUE;
    for(int j=0; j<costs[0].length; j++){
        if(result>costs[costs.length-1][j]){
            result = costs[costs.length-1][j];
        }
    }
    return 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 *