给出飞机的起飞和降落时间的列表,用 interval 序列表示. 请计算出天上同时最多有多少架飞机?
样例
对于每架飞机的起降时间列表:[[1,10],[2,3],[5,8],[4,7]]
, 返回3
。
注意
如果多架飞机降落和起飞在同一时刻,我们认为降落有优先权。
分析:可以根据每个线段,利用一个map来标记,对于第一个[1,10],我们标记m[1]+=1,m[10]-=1,表示在1这个时刻多了一架飞机,而在10这个时候少了一架飞机,即用m记录飞机的变化数目。注意:如果降落不具有优先权的话,也就是说在10这个时候我们可以认为还在天上的话,那么应该设m[11]-=1
代码:
/**
* 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
map<int,int> m;
set<int> s;
for(int i=0;i<airplanes.size();i++)
{
Interval in = airplanes[i];
m[in.start]++;
m[in.end]--;
s.insert(in.start);
s.insert(in.end);
}
vector<int> t;
copy(s.begin(),s.end(),back_inserter(t));// already sorted
int ret = 0;
int cnt = 0;
for(auto x:t)
{
cnt+=m[x];
ret = max(ret,cnt);
}
return ret;
}
};