Leetcode 1029 Two City Scheduling

这是一道简单题目,本来是不打算写一篇博客来记录的,但是我在做题过程中发现了自己一直以来的一个缺点,所以想记录一下。

看到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;
  }
};

#直达链接

LeetCode 1029. Two City Scheduling