公司计划面试 2N 人。第 i 人飞往 A 市的费用为 costs[i][0],飞往 B 市的费用为 costs[i][1]。
返回将每个人都飞到某座城市的最低费用,要求每个城市都有 N 人抵达。
示例:
输入:[[10,20],[30,200],[400,50],[30,20]] 输出:110 解释: 第一个人去 A 市,费用为 10。
第二个人去 A 市,费用为 30。 第三个人去 B 市,费用为 50。 第四个人去 B 市,费用为 20。最低总费用为 10 + 30 + 50 + 20 = 110,每个城市都有一半的人在面试
解读:总共要2N个人,你得一半派去A地,一半派去B地,简单粗暴就是把所有人派去A地的费用SUM,然后算一下把人从B派去A的费用差即priceB - priceA (+ sum 等于把人派到B的费用),然后排序,选前2/n个即可。
public static int twoCitySchedCost2(int[][] costs) {
int len = costs.length;
int[] dif = new int[len];
int sum = 0;
for (int i = 0; i < len; i++) {
//计算把人从B专派向A的费用
dif[i] = costs[i][1] - costs[i][0];
//计算把所有人派往A地的费用
sum += costs[i][0];
}
//排序之后肯定是负数在前,即将人派向A比B要贵的差值
Arrays.sort(dif);
for (int i = 0; i < len / 2; i++) {
sum += dif[i];
}
return sum;
}