265. Paint House II

There are a row ofnhouses, each house can be painted with one of thekcolors. The cost of painting each house with a certain color is different. You have to paint all the houses such that no two adjacent houses have the same color.

The cost of painting each house with a certain color is represented by anxkcost matrix. For example,costs[0][0]is the cost of painting house 0 with color 0;costs[1][2]is the cost of painting house 1 with color 2, and so on... Find the minimum cost to paint all houses.

Note:
All costs are positive integers.

Example:

Input:
 [[1,5,3],[2,9,4]]

Output:
 5

Explanation: 
Paint house 0 into color 0, paint house 1 into color 2. Minimum cost: 1 + 4 = 5; 
             Or paint house 0 into color 2, paint house 1 into color 0. Minimum cost: 3 + 2 = 5.

Follow up:
Could you solve it inO(nk) runtime?

class Solution {
    public int minCostII(int[][] costs) {
        if (costs == null || costs.length == 0 || costs[0].length == 0) return 0;
        int n = costs.length, m = costs[0].length;
        int prevMin = 0, prevMinIndex = -1, prevSecMin = 0;

        for (int i = 0; i < n; i++){
            int curMin = Integer.MAX_VALUE, curMinIndex = -1, curSecMin = Integer.MAX_VALUE;
            for (int j = 0; j < m; j++){
                int temp = costs[i][j] + (prevMinIndex == j ? prevSecMin : prevMin);

                if (curMinIndex < 0){
                    curMin = temp;
                    curMinIndex = j;
                }
                else if (temp < curMin){
                    curSecMin = curMin;
                    curMin = temp;
                    curMinIndex = j;
                }
                else if (temp < curSecMin){
                    curSecMin = temp;
                }
            }

            prevMin = curMin;
            prevMinIndex = curMinIndex;
            prevSecMin = curSecMin;
        }

        return prevMin;
    }
}

results for ""

    No results matching ""