V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lovegnep
V2EX  ›  算法

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

  •  
  •   lovegnep · 2020-06-09 17:01:35 +08:00 · 1961 次点击
    这是一个创建于 1624 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    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  
       2020-06-09 17:17:26 +08:00
    10+外服,上海一号服转发,可用端口 10000+,但超过 5000 并发会崩,所以是 5000,🐶
    我想问,跟虹桥啥关系?

    只考虑起落时间么?停机坪无限大?客流、架次、时段忽略?异常不考虑么?
    eke
        6
    eke  
       2020-06-09 17:21:33 +08:00 via Android
    排序扫一遍
    lovegnep
        7
    lovegnep  
    OP
       2020-06-09 17:22:48 +08:00
    @imn1 只考虑起落时间
    nevin47
        8
    nevin47  
       2020-06-09 17:25:34 +08:00
    用 hash 或者平衡树来保存每个时刻的情况,方便动态增减
    然后扫一次填表
    再扫一次树或者表求解
    imn1
        9
    imn1  
       2020-06-09 17:25:46 +08:00
    哦,看懂了,原来是时间点,不是时长……
    求哪个时间点停留最多飞机的数量
    wshcdr
        10
    wshcdr  
       2020-06-09 23:02:28 +08:00
    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);
    }
    }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3492 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:37 · PVG 19:37 · LAX 03:37 · JFK 06:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.