拼车

思路
1、记录每个站上下车的查分(包括两部分,上车和下车)
2、初始站,车上人数为0,然后每个站判断加上当前站的差分,车上人数是否大于容量。
注意
为了保证按顺序过站,这里不能使用unordered_map,而要使用普通的map(带顺序)。
bool carPooling(vector<vector<int>>& trips, int capacity) {
int trips_sz = trips.size();
if(trips_sz == 0) return false;
std::map<int, int> map;
for (int i = 0; i < trips_sz; ++i) {
auto iter = map.find(trips[i][1]);
if(iter != map.end()) {
map[trips[i][1]] += trips[i][0];
} else {
map[trips[i][1]] = trips[i][0];
}
iter = map.find(trips[i][2]);
if(iter != map.end()) {
map[trips[i][2]] -= trips[i][0];
} else {
map[trips[i][2]] = -trips[i][0];
}
}
int cur = 0;
for (auto & it : map) {
cur += it.second;
if (cur > capacity) return false;
}
return true;
}

浙公网安备 33010602011771号