lintcode:数飞机

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lintcode:数飞机相关的知识,希望对你有一定的参考价值。

数飞机

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

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

样例

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

解题

参考链接 

利用HashMap记录每个时刻的飞机数量

利用set记录时间点

最后对set 的每个时间点,找出连续时间点飞机数量和最大的那个时间段

/**
 * Definition of Interval:
 * public classs Interval {
 *     int start, end;
 *     Interval(int start, int end) {
 *         this.start = start;
 *         this.end = end;
 *     }
 */

class Solution {
    /**
     * @param intervals: An interval array
     * @return: Count of airplanes are in the sky.
     */
    public int countOfAirplanes(List<Interval> airplanes) { 
        // write your code here
        if(airplanes == null || airplanes.size() == 0)
            return 0;
        HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
        Set<Integer> set = new TreeSet<Integer>();// 记录此时刻的飞机数量
        for(int i =0;i<airplanes.size();i++){
            int s = airplanes.get(i).start;
            int e = airplanes.get(i).end;
            if(map.containsKey(s))
                map.put(s,map.get(s) + 1);// 空中的飞机 + 1
            else
                map.put(s,1);
            if(map.containsKey(e))
                map.put(e,map.get(e) - 1);// 空中飞机 - 1
            else
                map.put(e,-1);
            set.add(s);// 该时间点的飞机数 set是升序排序的
            set.add(e);
        }
        Iterator it = set.iterator();
        int maxAirNo = Integer.MIN_VALUE;  
        int curcount = 0;  
        Iterator<Integer> tmp = set.iterator(); 
        while(tmp.hasNext()){  
             curcount += map.get(tmp.next());  // 从最小时间点开始找出连续最长的飞机数和
             maxAirNo = Math.max(maxAirNo, curcount);  
        }  
         
        return maxAirNo;
    }
}

 

 

以上是关于lintcode:数飞机的主要内容,如果未能解决你的问题,请参考以下文章

lintcode:快乐数

精LintCode领扣算法问题答案:1890. 形成最小数

精LintCode领扣算法问题答案:1890. 形成最小数

LintCode刷题小记491

LintCode 56. 两数之和

lintcode_184.最大数