LC1094.拼车

image.png

思路

  • 思路非常自然,类似于真实情况的模拟。差分的本质,就是在模拟上车下车情景。
  • 差分的一大作用是减少重复操作
  • diff[from] += passengers表示上车
  • 上车之后人数一直不变,diff[from + 1] ...统统为0,代表车上的人数没有变化
  • diff[to] -= passengers表示下车
  • 对差分数组求和,也得到了当前时刻车上的总人数

代码

  1. class Solution {
  2. public:
  3. bool carPooling(vector<vector<int>>& trips, int capacity) {
  4. vector<int> diff(1000 + 5, 0);
  5. int n_trips = trips.size();
  6. for (int i = 0; i < n_trips; ++i) {
  7. int passengers = trips[i][0];
  8. int from = trips[i][1];
  9. int to = trips[i][2];
  10. diff[from] += passengers;
  11. diff[to] -= passengers;
  12. }
  13. int cur_sum = 0;
  14. for (int i = 0; i < 1001; i++) {
  15. cur_sum += diff[i];
  16. if (cur_sum > capacity) {
  17. return false;
  18. }
  19. }
  20. return true;
  21. }
  22. };