我的做法
使用up
和down
数组分别记录每个站点应上车和应下车的人数,然后遍历每个站点(小于等于1000),检查每个站点的车的容量,如果容量小于0则返回false
,否则返回true
class Solution {
public:
bool carPooling(vector<vector<int>>& trips, int capacity) {
vector<int> up(1010, 0);
vector<int> down(1010, 0);
for (int i = 0; i < trips.size(); ++i) {
up[trips[i][1]] += trips[i][0];
down[trips[i][2]] += trips[i][0];
}
int t = 0;
while (t <= 1000) {
if (down[t]) capacity += down[t];
if (up[t]) capacity -= up[t];
if (capacity < 0) return false;
++t;
}
return true;
}
};
优化,up
和down
可以使用同一个数组d
来记录,题解说是差分数组
class Solution {
public:
bool carPooling(vector<vector<int>>& trips, int capacity) {
vector<int> d(1001, 0);
for (int i = 0; i < trips.size(); ++i) {
d[trips[i][1]] += trips[i][0];
d[trips[i][2]] -= trips[i][0];
}
int s = 0;
for (int t: d) {
s += t;
if (s > capacity) return false;
}
return true;
}
};