公司计划面试 2N
人。第 i
人飞往 A
市的费用为 costs[i][0]
,飞往 B
市的费用为 costs[i][1]
。
返回将每个人都飞到某座城市的最低费用,要求每个城市都有 N
人抵达。
示例1:
输入:[[10,20],[30,200],[400,50],[30,20]]
输出:110
解释:
第一个人去 A 市,费用为 10。
第二个人去 A 市,费用为 30。
第三个人去 B 市,费用为 50。
第四个人去 B 市,费用为 20。
最低总费用为 10 + 30 + 50 + 20 = 110,每个城市都有一半的人在面试。
提示:
1 <= costs.length <= 100
costs.length
为偶数1 <= costs[i][0], costs[i][1] <= 1000
/**
* @param {number[][]} costs
* @return {number}
*/
var twoCitySchedCost = function(costs) {
};
个人解法
var twoCitySchedCost = function(costs) {
//aNum A城市人数, bNum B城市人数
var result = 0,
bNum = 0;
//排序,价格差大的排前面
costs.sort((a , b) => Math.abs(b[0] - b[1]) - Math.abs(a[0] - a[1]));
//前costs/2个选择价格差大的那个便宜的,如果某个城市人满了,就选择那个没满的城市
costs.forEach(element => {
if(aNum === costs.length / 2){
//A城满了
result += element[1];
}else if(bNum === costs.length / 2){
//B城满了
result += element[0];
}else{
//选择最便宜的那个
if(element[0] > element[1]){
result += element[1];
bNum++;
}else{
result += element[0];
aNum++;
}
}
});
return result;
};