lovegnep
V2EX  ›  算法

求虹桥机场停靠的最大的飞机数量

  •  
  •   lovegnep · Jun 9, 2020 · 2672 views
    This topic created in 2170 days ago, the information mentioned may be changed or developed.

    给定二维数组 [[3,7],[2,10],[3,4],[6,12],[13,19]],每个元素代表某一个飞机的降落与起飞时间,如题,求机场最大停靠的飞机数量

    10 replies    2020-06-09 23:02:28 +08:00
    xjtroddy
        1
    xjtroddy  
       Jun 9, 2020
    感觉很难啊,不会,插眼等大神
    yaoliyc
        2
    yaoliyc  
       Jun 9, 2020 via iPhone
    没看懂
    jangit
        3
    jangit  
       Jun 9, 2020 via iPhone
    就弄个大小为 16 的数组,memset 为 0, [3,7] 的话就把数组 0-4 加个一,以此类推,最后找最大的那个数
    大 guy 是这样的吧
    whileFalse
        4
    whileFalse  
       Jun 9, 2020
    不在乎性能的话不是随便写。

    l = [[3,7],[2,10],[3,4],[6,12],[13,19]]
    l = sorted([(i[0], 1) for i in l] + [(i[1], -1) for i in l])
    current, max_value = 0, 0

    for i in l:
    current += i[1]
    max_value = max(max_value, current)

    print(max_value)
    imn1
        5
    imn1  
       Jun 9, 2020
    10+外服,上海一号服转发,可用端口 10000+,但超过 5000 并发会崩,所以是 5000,🐶
    我想问,跟虹桥啥关系?

    只考虑起落时间么?停机坪无限大?客流、架次、时段忽略?异常不考虑么?
    eke
        6
    eke  
       Jun 9, 2020 via Android
    排序扫一遍
    lovegnep
        7
    lovegnep  
    OP
       Jun 9, 2020
    @imn1 只考虑起落时间
    nevin47
        8
    nevin47  
       Jun 9, 2020
    用 hash 或者平衡树来保存每个时刻的情况,方便动态增减
    然后扫一次填表
    再扫一次树或者表求解
    imn1
        9
    imn1  
       Jun 9, 2020
    哦,看懂了,原来是时间点,不是时长……
    求哪个时间点停留最多飞机的数量
    wshcdr
        10
    wshcdr  
       Jun 9, 2020
    package com.company;

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Stream;

    public class stream001 {

    public static long max = 0;
    public static void main(String[] args) {
    List<Integer> list1 = new ArrayList<Integer>() {
    {
    add(1);
    add(2);
    add(3);
    add(4);
    add(5);
    }

    };


    List<Span> listSpan = new ArrayList<Span>() {
    {
    add(new Span(3,7));
    add(new Span(4, 8));
    add(new Span(10, 12));
    }

    };




    list1.forEach(item2->{
    long l2 = listSpan.stream().filter(span -> item2 >= span.start && item2 <= span.end)
    .count();
    if(stream001.max < l2)
    stream001.max = l2;

    });

    System.out.println(stream001.max);
    }
    }
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5092 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 09:22 · PVG 17:22 · LAX 02:22 · JFK 05:22
    ♥ Do have faith in what you're doing.