Lintcode:数飞机

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

 注意事项

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

样例

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


我的思路:建立一个数组对应所有时刻,如果飞机起降时间为[1,10]则对元素1-9采取加1操作

统计完所有飞机后,返回数组的最大值。

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 max = 0;
        int n = airplanes.size();
        if(n == 0)
          return 0;
        for(int i=0; i<n; i++)
        {
            if(airplanes[i].end>max)
               max = airplanes[i].end;
        }
        vector<int> count(max,0);
        for(int i=0; i<n; i++)
        {
            for(int j = airplanes[i].start; j<airplanes[i].end; j++)
                count[j]++;
        }
        return *max_element(begin(count), end(count));
    }
};


网上其他较好的办法,采用了set以及map结构:

  1. class Solution {  
  2. public:  
  3.       
  4.     int countOfAirplanes(vector<Interval> &airplanes) {  
  5.         if(airplanes.empty())  
  6.             return 0;  
  7.         map<int,int> count;  
  8.         set<int>     base;  
  9.       
  10.         for(auto &e:airplanes){  
  11.             ++count[e.start]; //e.start时刻天上飞机增加一架  
  12.             --count[e.end];   //e.end时刻天上飞机减少一架  
  13.             base.insert(e.start);   //把所有起飞,降落的时刻都排序,所以用set  
  14.             base.insert(e.end);  
  15.         }   
  16.         int cur=0,mx=0;  
  17.         for(auto &e:base){   //此时base中的时刻成升序排列,即e是逐渐增大  
  18.             cur+=count[e];   //cur用来记录当前(即e时刻)天上飞机的总数量  
  19.             mx=max(cur,mx);  
  20.         }  
  21.         return mx;     
  22.     }  
  23. };  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值