【发布时间】: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
假设我们有 2 个数组,其中一个(即 A)包含对象 i 进入房间的时间,另一个(即 B)包含时间 i 会离开。它们都没有以任何方式排序,它们的内容是实数。
例如,对象 3 具有:A[3]=0.785 和 B[3]=4.829。
您将如何在 O(nlogn) 中找到在任何给定时间 t 房间中的最大对象?
【问题讨论】:
标签: arrays algorithm object max indices
你可以试试这个:
如果你不能从数组中“弹出”元素,你可以使用两个索引变量来代替;此外,当其中一个数组已经为空时,您必须添加案例。
排序有O(nlogn),下面的循环有O(2*n),因此总共有O(nlogn)。
【讨论】:
从两个数组中获取所有时间并配对{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
【讨论】: