516. 房屋染色 II
作者:互联网
516. 房屋染色 II
这里有 n 个房子在一列直线上,现在我们需要给房屋染色,共有 k 种颜色。每个房屋染不同的颜色费用也不同,你需要设计一种染色方案使得相邻的房屋颜色不同,并且费用最小。 费用通过一个 n x k 的矩阵给出,比如 cost[0][0] 表示房屋 0 染颜色 0 的费用, cost[1][2] 表示房屋 1 染颜色 2 的费用。样例
样例1 输入: costs = [[14,2,11],[11,14,5],[14,3,10]] 输出: 10 说明: 三个屋子分别使用第1,2,1种颜色,总花费是10。 样例2 输入: costs = [[5]] 输出: 5 说明: 只有一种颜色,一个房子,花费为5挑战
用O(nk)的时间复杂度解决注意事项
所有费用都是正整数 public class Solution { /** * @param costs: n x k cost matrix * @return: an integer, the minimum cost to paint all houses */ public int minCostII(int[][] costs) { // write your code here if (costs.length == 0) return 0; for (int i = 0; i < costs.length-1; i++) { int flag=0; int min = Integer.MAX_VALUE; int min2 = Integer.MAX_VALUE; for (int j = 0; j < costs[i].length; j++) { if (costs[i][j] < min) { min2=min; min = costs[i][j]; flag=j; }else if(costs[i][j] < min2){ min2=costs[i][j]; } } for (int k = 0; k < costs[i].length; k++) { if (flag == k) { costs[i+1][k] = costs[i+1][k]+min2; } else { costs[i+1][k] = costs[i+1][k]+min; } } } int ret = costs[costs.length - 1][0]; for (int i = 1; i < costs[costs.length - 1].length ; i++) { ret=Math.min(ret, costs[costs.length - 1][i]); } return ret; } }标签:cost,min,int,染色,II,length,costs,min2,516 来源: https://blog.csdn.net/xwdrhgr/article/details/116912574