具体思想:
这道题也可以用差分数组来算,但是个人觉得很取巧,原因是数组范围;
如果对于数组范围为负数到正数,并不是给出的0~1000,差分数组方式并不是很合适;
差分思想,区间起始结束进行标记,直接一边遍历中求最大值是否超过;
差分必然快,因为On复杂度;
具体代码:
1.传统的上下车思路:
class Solution {
public:
bool carPooling(vector<vector<int>>& trips, int capacity) {
vector<vector<int>> times;
for(auto& vec:trips){
times.push_back({vec[1],vec[0]});
times.push_back({vec[2],-vec[0]});
}
sort(times.begin(),times.end(),[](vector<int>& a,vector<int>& b){
if(a[0]==b[0]){
return a[1]<b[1];
}
return a[0]<b[0];
});
int num=0;
for(auto vec:times){
num+=vec[1];
if(num>capacity)
return false;
}
return true;
}
};
2.差分数组思路:
class Solution {
public:
bool carPooling(vector<vector<int>>& trips, int capacity) {
vector<int>mins(1010,0);
for(auto& vec:trips){
mins[vec[1]]+=vec[0];
mins[vec[2]]-=vec[0];
}
int cnt=0;
for(int i=0;i<mins.size();i++){
cnt+=mins[i];
if(cnt>capacity)
return false;
}
return true;
}
};