假设有2N个人。一家公司希望组织一次面试。第i个人飞往城市A的成本是成本[i] [0],第i个人飞往城市B的成本是成本[i] [1]。我们必须找到让每个人飞往一个城市的最低成本,这样N人才能到达每个城市。因此,如果给定的列表是[[10,20],[30,200],[400,50],[30,20]],则输出将为110。因此,我们将以成本10将人P1发送到城市A ,第二人到城市A的费用为30,第三人和第四人到城市B的费用分别为50和20。
为了解决这个问题,我们将遵循以下步骤-
n:=数组的大小
a:= n / 2和b:= n / 2
对数组进行排序,然后让ans:= 0
对于i:= 0至n – 1 −
将b减1
ans:= ans + array [i,1]
减少1
ans:= ans + array [i,0]
如果b = 0且array [i,0] <= array [i,1]且a> 0,则
其他
返回ans
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
static bool cmp(vector <int> a, vector <int> b){
return abs(a[0] - a[1]) > abs(b[0] - b[1]);
}
int twoCitySchedCost(vector<vector<int>>& costs) {
int n = costs.size();
int a = n/2;
int b = n/2;
sort(costs.begin(), costs.end(), cmp);
int ans = 0;
for(int i = 0; i < n; i++){
if(b == 0 || (costs[i][0] <= costs[i][1] && a > 0)){
a--;
//cout << a << " " << costs[i][0] << endl;
ans += costs[i][0];
} else {
//cout << costs[i][1] << endl;
b--;
ans += costs[i][1];
}
}
return ans;
}
};
main(){
Solution ob;
vector<vector<int>> c = {{10,20},{30,200},{400,50},{30,20}};
cout << ob.twoCitySchedCost(c);
}[[10,20],[30,200],[400,50],[30,20]]
输出结果
110