看了下官方的算法:我惊呆了。
先让 2n 个人都前往 b 市
之后选 n 个人改签去 a 市
如何挑选这 n 个人?
看 pA -PB,这个值越小(可能是负值,表明 pA 远远小于 pB )
所以需要依据 pA - pB 来排序
class Solution {
public:
int twoCitySchedCost(vector<vector<int>>& costs) {
// Sort by a gain which company has
// by sending a person to city A and not to city B
sort(begin(costs), end(costs),
[](const vector<int> &o1, const vector<int> &o2) {
return (o1[0] - o1[1] < o2[0] - o2[1]);
});
int total = 0;
int n = costs.size() / 2;
// To optimize the company expenses,
// send the first n persons to the city A
// and the others to the city B
for (int i = 0; i < n; ++i) total += costs[i][0] + costs[i + n][1];
return total;
}
};
作者:LeetCode
链接:https://leetcode-cn.com/problems/two-city-scheduling/solution/er-cha-shu-de-chui-xu-bian-li-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。