题目复述:
一个二维数组,costs[2N][2],数组的长度是偶数。costs里面有N个元素选择第一个数,另外N个元素选择第二个数。求这2N个数相加得到的最小值。
思路:
先全部选择第二个数,然后把其中一半改为第一个数,对二维数组进行排序。排序的规则是每一个子数组中第二个数减去第一个数越大的放在前面。
class Solution {
public int twoCitySchedCost(int[][] costs) {
int N_2 = costs.length;
int totalCost = 0;
for(int i = 0; i < N_2; i++){
totalCost += costs[i][1]; //全部飞往B市
}
// Arrays.sort(costs, new Comparator<int[]>(){
// public int compare(int[] o1, int[] o2){
// return (o2[1] - o2[0]) - (o1[1] - o1[0]);
// }
// });
Arrays.sort(costs, (o1, o2) -> ((o2[1] - o2[0]) - (o1[1] - o1[0])));//lambda表达式
for(int i = 0; i < N_2/2; i++){
totalCost += (costs[i][0] - costs[i][1]);
}
return totalCost;
}
}