这是一道简单题目,本来是不打算写一篇博客来记录的,但是我在做题过程中发现了自己一直以来的一个缺点,所以想记录一下。
看到easy的标记,就没有认真思考,我的第一个想法是使用贪心算法,每个人去哪座城市的花销小,就去哪座城市,如果最后去两座城市的人数不等,就将人多的那个城市的人花销最大的几位改为另一个城市。。。
至于为什么这么明显的错误算法,我都会写来几十行才发现不对,是因为我根本就没有思考,直接就写代码了。。
很多时候我写代码就是这样,有一个大概的思路就开始写,而不充分考虑。
附上完整的正确的代码,也是使用贪心算法。
static int x = [] () {ios::sync_with_stdio(false); cin.tie(0); return 0;} ();
// Greedy
class Solution {
public:
int twoCitySchedCost(vector<vector<int>>& costs) {
int res = 0;
const int n = costs.size(), half = n >> 1;
sort(costs.begin(), costs.end(),
[](const vector<int> &a, const vector<int> &b) {
return a[0] - a[1] < b[0] - b[1];
});
for (int i = 0; i < n; ++i)
res += i < half? costs[i][0]: costs[i][1];
return res;
}
};