拼车

思路

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;
    }
posted @ 2021-07-13 10:58  cyssmile  阅读(60)  评论(0)    收藏  举报