zoukankan      html  css  js  c++  java
  • 391. 数飞机

    391. 数飞机

    中文English

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

    样例

    样例 1:

    输入: [(1, 10), (2, 3), (5, 8), (4, 7)]
    输出: 3
    解释: 
    第一架飞机在1时刻起飞, 10时刻降落.
    第二架飞机在2时刻起飞, 3时刻降落.
    第三架飞机在5时刻起飞, 8时刻降落.
    第四架飞机在4时刻起飞, 7时刻降落.
    在5时刻到6时刻之间, 天空中有三架飞机.
    

    样例 2:

    输入: [(1, 2), (2, 3), (3, 4)]
    输出: 1
    解释: 降落优先于起飞.
    

    注意事项

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

     
    输入测试数据 (每行一个参数)如何理解测试数据?

     扫描线算法

    """
    Definition of Interval.
    class Interval(object):
        def __init__(self, start, end):
            self.start = start
            self.end = end
    """
    
    class Solution:
        """
        @param airplanes: An interval array
        @return: Count of airplanes are in the sky.
        """
        '''
        大致思路:
        1.只需要看什么时候升起什么时候降落,取出当前时刻最多出现的飞机,初始化p,每出现一个升起的飞机,则+1,每出现一个降落的飞机则-1,最终返回最大的p即可。
        '''
        def countOfAirplanes(self, airplanes):
            l = []
            for i in airplanes:
                l.append([i.start,1])
                l.append([i.end,-1])
            
            #格式[[2,1],[3,-1],[5,1],[10,-1]] 前面的是时刻,后面代表当前是升起还是降落
            l.sort()
            max_number = 0#最大出现的飞机数量
            c = 0#当前时刻出现的飞机数量
            for j in l:
                c += j[1]
                max_number = max(max_number,c)
            return max_number
                
            
    ##扫描线算法
    class Solution:
        '''
        大致思路:
        1.只需要看什么时候升起什么时候降落,取出当前时刻升的最多(减去降的)出现的飞机,初始化p,每出现一个升起的飞机,则+1,每出现一个降落的飞机则-1,最终返回最大的p即可。
        '''
        def countOfAirplanes(self, airplanes):
            p = 0
            l = []
            for i in airplanes:
                l.append([i[0],1])
                l.append([i[1],-1])
            #取出所有升起和降落的飞机,升起 [i[0],1]   降落 [i[1],-1]
    
            l.sort()
            max_n = 0
            for j in l:
                #p计算的当前时刻出现的飞机数量,当前时刻 升起 - 降落的
                p += j[1]
                #max_n记录某时刻出现 升起 - 降落最大飞机数量的,取出某时刻出现最大飞机数数量的
                max_n = max(max_n,p)
            return max_n     
       
    result = Solution().countOfAirplanes([(10,14),(10,15),(10,16),(1,10),(2,10),(3,10),(4,10)])
    print(result)
  • 相关阅读:
    深入理解JVM(二)--对象的创建
    深入理解JVM(一) -- 自动内存管理机制
    代理模式(Proxy)
    心知天气数据API 产品的高并发实践
    Jenkins 构建踩坑经历
    log4net SmtpAppender 踩坑总结
    从 ASP.NET Core 2.1 迁移到 2.2 踩坑总结
    在Windows上安装 Consul
    redis-desktop-manager 0.9.3 安装(最后一个免费版本)
    在Windows上安装Redis
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12879699.html
Copyright © 2011-2022 走看看