The cost of painting each house with a certain color is represented by a
n x k
cost 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.
Follow up:
Could you solve it in O(nk) runtime?
public class Solution {
public int minCostII(int[][] costs) {
if (costs == null || costs.length == 0 || costs[0].length == 0) {
return 0;
}
int n = costs.length;
int k = costs[0].length;
int[] dp = new int[k];
int min1 = 0;
int min2 = 0;
int id1 = 0;
for (int i = 0; i < n; i++) {
int nextMin1 = Integer.MAX_VALUE;
int nextId1 = -1;
int nextMin2 = Integer.MAX_VALUE;
for (int j = 0; j < k; j++) {
if (j != id1) {
dp[j] = min1 + costs[i][j];
} else {
dp[j] = min2 + costs[i][j];
}
if (dp[j] < nextMin1) {
nextId1 = j;
nextMin2 = nextMin1;
nextMin1 = dp[j];
} else if (dp[j] < nextMin2) {
nextMin2 = dp[j];
}
}
min1 = nextMin1;
min2 = nextMin2;
id1 = nextId1;
}
return min1;
}
}
没有评论:
发表评论