两个数组,一个有时间,另一个有时间
Two arrays one with time in, another with time out of something
假设我们有 2 个数组,其中一个(即 A)包含对象 i 进入房间的时间,另一个(即 B)包含timei会离开。这些都没有以任何方式排序,它们的内容是实数。
例如,对象 3 具有:A[3]=0.785 和 B[3]=4.829。
你如何在 O(nlogn) 时间内找到房间中在任何给定时间 t 的最大对象数?
从两个数组中获取所有时间并配对{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
你可以试试这个:
- 将对象数初始化为零
- 对两个数组进行排序
- 当任一数组中还有剩余元素时
- 确定哪个数组的第一个值较小
- 如果 "enter" 中的第一个值较小,则增加对象数并弹出该值
- 如果 "leave" 中的第一个值较小,则减少对象的数量并弹出该值
- 检查您是否找到了新的最大对象数
如果你不能"pop"个数组中的元素,你可以使用两个索引变量代替;另外,当其中一个数组已经为空时,您必须添加案例。
排序复杂度为 O(nlogn),接下来的循环复杂度为 O(2*n),因此总共为 O(nlogn)。
假设我们有 2 个数组,其中一个(即 A)包含对象 i 进入房间的时间,另一个(即 B)包含timei会离开。这些都没有以任何方式排序,它们的内容是实数。
例如,对象 3 具有:A[3]=0.785 和 B[3]=4.829。
你如何在 O(nlogn) 时间内找到房间中在任何给定时间 t 的最大对象数?
从两个数组中获取所有时间并配对{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
你可以试试这个:
- 将对象数初始化为零
- 对两个数组进行排序
- 当任一数组中还有剩余元素时
- 确定哪个数组的第一个值较小
- 如果 "enter" 中的第一个值较小,则增加对象数并弹出该值
- 如果 "leave" 中的第一个值较小,则减少对象的数量并弹出该值
- 检查您是否找到了新的最大对象数
如果你不能"pop"个数组中的元素,你可以使用两个索引变量代替;另外,当其中一个数组已经为空时,您必须添加案例。
排序复杂度为 O(nlogn),接下来的循环复杂度为 O(2*n),因此总共为 O(nlogn)。