-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPaintHouse2.java
More file actions
33 lines (32 loc) · 1.4 KB
/
Copy pathPaintHouse2.java
File metadata and controls
33 lines (32 loc) · 1.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
* There are a row of n houses, each house can be painted with one of the k colors. 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 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.
*/
public class PaintHouse2 {
public int minCostII(int[][] costs) {
if (costs == null || costs.length == 0)
return 0;
int minCost = 0, secondMinCost = 0, lastColor = -1;
for (int[] cost : costs) {
int curMin = Integer.MAX_VALUE, curSecondMin = Integer.MAX_VALUE, curColor = -1;
for (int j = 0; j < cost.length; j++) {
int curCost = cost[j] + (j == lastColor ? secondMinCost : minCost);
if (curCost < curMin) {
curSecondMin = curMin;
curMin = curCost;
curColor = j;
} else if (curCost < curSecondMin) {
curSecondMin = curCost;
}
}
minCost = curMin;
secondMinCost = curSecondMin;
lastColor = curColor;
}
return minCost;
}
}