【问题标题】:Two arrays one with time in, another with time out of something两个数组,一个有时间,另一个有时间
【发布时间】:2018-10-23 09:35:05
【问题描述】:

假设我们有 2 个数组,其中一个(即 A)包含对象 i 进入房间的时间,另一个(即 B)包含时间 i 会离开。它们都没有以任何方式排序,它们的内容是实数

例如,对象 3 具有:A[3]=0.785 和 B[3]=4.829。

您将如何在 O(nlogn) 中找到在任何给定时间 t 房间中的最大对象?

【问题讨论】:

    标签: arrays algorithm object max indices


    【解决方案1】:

    你可以试试这个:

    • 将对象数初始化为零
    • 对两个数组进行排序
    • 当任一数组中都有剩余元素时
      • 确定哪个数组的第一个值更小
      • 如果“enter”中的第一个值较小,则增加对象的数量并弹出该值
      • 如果“leave”中的第一个值较小,则减少对象数量并弹出该值
      • 检查您是否找到了新的最大对象数

    如果你不能从数组中“弹出”元素,你可以使用两个索引变量来代替;此外,当其中一个数组已经为空时,您必须添加案例。

    排序有O(nlogn),下面的循环有O(2*n),因此总共有O(nlogn)。

    【讨论】:

      【解决方案2】:

      从两个数组中获取所有时间并配对{time from A or from B; f = +1 for A/ -1 for B}

      按时间键对所有对的数组进行排序(如果平局+1在-1之前)

      制作count = 0

      遍历对数组,将f 值添加到count

      count 的最大值是“房间里的最大对象数”

      例子:

        A = [2, 5], B = [7, 9]
        pairs = (2,1),(5,1),(7,-1),(9,-1)
        count = 1, 2, 1, 0 
        maxcount=2 at interval 5..7
      

      【讨论】:

      • @tobias_k 有 2*n 对(时间矩),排序 O(nlogn)。遍历 O(n)。为什么是二次方?
      • 好吧,我误解了这些对是什么。有道理,实际上比我的方法更简单。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多