1094. 拼车
思路:先将数组按起始出发位置进行升序排列,然后来说for循环进行枚举,每次上车的一批乘客用优先队列来维护,按目的地位置升序排列。
class Solution {
public:
typedef struct Node{
int f,t,num;
friend bool operator<(const struct Node t1,const struct Node t2){
return t1.f<t2.f;
}
}node;
typedef pair<int,int> PII;
bool carPooling(vector<vector<int>>& trips, int capacity) {
vector<node> v;
//将数组按起始出发位置进行升序排列
for(int i=0;i<trips.size();i++){
node tmp;
tmp={trips[i][1],trips[i][2],trips[i][0]};
v.push_back(tmp);
}
sort(v.begin(),v.end());
//每次上车的一批乘客用优先队列来维护,按目的地位置升序排列
priority_queue<PII ,vector<PII>,greater<PII>> qu;
bool flag=1;
for(int i=0;i<v.size();i++){
int t=v[i].f;
while(qu.size()&&qu.top().first<=t){
capacity+=qu.top().second;
qu.pop();
}
if(capacity>=v[i].num){
qu.push({v[i].t,v[i].num});
capacity-=v[i].num;
}else{
flag=0;
break;
}
}
return flag;
}
};