LC1094.拼车
思路
- 思路非常自然,类似于真实情况的模拟。差分的本质,就是在模拟上车下车情景。
- 差分的一大作用是减少重复操作
diff[from] += passengers
表示上车- 上车之后人数一直不变,
diff[from + 1] ...
统统为0,代表车上的人数没有变化 diff[to] -= passengers
表示下车- 对差分数组求和,也得到了当前时刻车上的总人数
代码
class Solution {
public:
bool carPooling(vector<vector<int>>& trips, int capacity) {
vector<int> diff(1000 + 5, 0);
int n_trips = trips.size();
for (int i = 0; i < n_trips; ++i) {
int passengers = trips[i][0];
int from = trips[i][1];
int to = trips[i][2];
diff[from] += passengers;
diff[to] -= passengers;
}
int cur_sum = 0;
for (int i = 0; i < 1001; i++) {
cur_sum += diff[i];
if (cur_sum > capacity) {
return false;
}
}
return true;
}
};