公司计划面试 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,每个城市都有一半的人在面试。
提示:
1 <= costs.length <= 100
costs.length
为偶数
1 <= costs[i][0], costs[i][1] <= 1000
C++
class Solution {
public:
static bool cmp(pair<int,pair<int,int>>& a, pair<int,pair<int,int>>& b)
{
return a.first<b.first;
}
int twoCitySchedCost(vector<vector<int>>& costs)
{
int res=0;
int n=costs.size();
vector<pair<int,pair<int,int>>> tmp;
for(int i=0;i<n;i++)
{
auto a=make_pair(costs[i][0],costs[i][1]);
auto b=make_pair(costs[i][0]-costs[i][1],a);
tmp.push_back(b);
}
sort(tmp.begin(),tmp.end(),cmp);
for(int i=0;i<n;i++)
{
if(i<n/2)
{
res+=tmp[i].second.first;
}
else
{
res+=tmp[i].second.second;
}
}
return res;
}
};
python
class Solution:
def twoCitySchedCost(self, costs: List[List[int]]) -> int:
tmp=[[x[0]-x[1],x[0],x[1]] for x in costs]
tmp=sorted(tmp,key=lambda x:x[0])
n=len(costs)
res=0
for i in range(n):
if i<n//2:
res+=tmp[i][1]
else:
res+=tmp[i][2]
return res