lintcode-391-数飞机

391-数飞机

给出飞机的起飞和降落时间的列表,用 interval 序列表示. 请计算出天上同时最多有多少架飞机?

注意事项

如果多架飞机降落和起飞在同一时刻,我们认为降落有优先权。

样例

对于每架飞机的起降时间列表:[[1,10],[2,3],[5,8],[4,7]], 返回3。

标签

数组 LintCode 版权所有 区间

思路

使用 map 记录起飞时刻与降落时刻飞机的数量,起飞时刻飞机数量 +1,降落时刻飞机数量 -1,然后将时刻排序,遍历排序后的时刻,寻找出最大值

code

/**
 * Definition of Interval:
 * classs Interval {
 *     int start, end;
 *     Interval(int start, int end) {
 *         this->start = start;
 *         this->end = end;
 *     }
 */
class Solution {
public:
    /**
     * @param intervals: An interval array
     * @return: Count of airplanes are in the sky.
     */
    int countOfAirplanes(vector<Interval> &airplanes) {
        // write your code here
        int size = airplanes.size();
        if (size <= 0) {
            return 0;
        }
        map<int, int> airCount;
        set<int> airTime;
        int maxCount = INT_MIN, curCount = 0;
        for (int i = 0; i < size; i++) {
            airCount[airplanes[i].start]++;
            airCount[airplanes[i].end]--;
            airTime.insert(airplanes[i].start);
            airTime.insert(airplanes[i].end);
        }
        for (auto t: airTime) {
            curCount += airCount[t];
            maxCount = max(maxCount, curCount);
        }
        return maxCount;
    }
};
posted @ 2017-08-11 10:23  LiBaoquan  阅读(467)  评论(0编辑  收藏  举报