思路:
这道题有很多种解法,刚好最近在学差分,就用差分做吧。首先是初始没有乘客,差分diff数组各项为0,不用求差构造差分数组了。接着是每一次乘车方案,起点站需要加上乘客数,终点站需要减去乘客数。注意:乘车区间是前闭后开的,因为终点站乘客下车了以后还可以继续拉客。(这里坑了我一会儿)
参考代码:
class Solution {
public:
bool carPooling(vector<vector<int>>& trips, int capacity) {
int diff[1005] = {0};
int n = trips.size();
int num, first, last;
for(int i = 0; i < n; i++)
{
num = trips[i][0];
first = trips[i][1];
last = trips[i][2];
diff[first] += num;
diff[last] -= num;
}
for(int i = 1; i < 1005; i++)
diff[i] += diff[i-1];
for(int i = 0; i < 1005; i++)
if(diff[i] > capacity)
return false;
return true;
}
};