题目:
公司计划面试 2N 人。第 i 人飞往 A 市的费用为 costs[i][0],飞往 B 市的费用为 costs[i][1]。
返回将每个人都飞到某座城市的最低费用,要求每个城市都有 N 人抵达。
题目链接:两地调度
C++:
自己写的垃圾代码, 对比比人写的, 感觉自己C++的运用也太垃圾了…
class Solution {
public:
struct node {
int valA;
int valB;
};
static bool cmp(node a, node b){
if(abs(a.valA - a.valB) == abs(b.valA - b.valB))
return a.valA > b.valA;
else
return abs(a.valA - a.valB) > abs(b.valA - b.valB);
}
int twoCitySchedCost(vector<vector<int>>& costs) {
int ret = 0;
int N = costs.size() / 2;
vector<node> list;
for(int i = 0; i < 2 * N; i++){
node tmp;
tmp.valA = costs[i][0];
tmp.valB = costs[i][1];
list.push_back(tmp);
}
sort(list.begin(), list.end(), cmp);
int cntA = N;
int cntB = N;
for(int i = 0; i < list.size(); i++){
if((cntA && list[i].valA <= list[i].valB)){
ret+= list[i].valA;
cntA--;
continue;
}
if((cntB && list[i].valB <= list[i].valA)){
ret+= list[i].valB;
cntB--;
continue;
}
while(cntA == 0 && cntB){
ret+= list[i].valB;
cntB--;
i++;
}
while(cntB == 0 && cntA){
ret+= list[i].valA;
cntA--;
i++;
}
}
return ret;
}
};
贴一个别人的简洁代码, 自己好菜…还是要多读书多看报
class Solution {
public:
int twoCitySchedCost(vector<vector<int>>& costs) {
sort(costs.begin(),costs.end(),[](vector<int>& a,vector<int>& b){
return a[0]-a[1]<b[0]-b[1];
});
int N=costs.size()/2;
int r=0;
for(int i=0;i<N;i++)
r+=costs[i][0];
for(int j=N;j<2*N;j++)
r+=costs[j][1];
return r;
}
};