【发布时间】:2018-12-17 15:21:24
【问题描述】:
间隔有开始时间和结束时间。 间隔可以重叠。可能有几个包含时间 t 的区间。可以只退回其中一个。
这是一道面试题。我能够通过基于结束和另一个基于开始的时间排序间隔并获取具有匹配开始和结束的间隔的交集来解决它。显然有更优化的解决方案。
这是一个示例:[1, 5] [2, 10] [3, 6] [2, 9] 并且目标是 8。在这种情况下,[2, 10] 和 [2, 9] 中的一个是正确答案。
我想问题的重点是预先计算间隔上的数据结构,以便可以以比线性更好的复杂性运行搜索。
【问题讨论】:
-
你为什么要对它们进行排序:O(nLog n) 单独排序,而不是迭代直到找到一个 - 最坏情况 O(n)?
-
假设与间隔 start 和 end 对应的数字是恒定大小(可以适合整数),给定的实现可以使用基数排序,因此运行时间为 O(n),而不是我'我说这是一个很好的解决方案。
-
我假设问题中有一个措辞错误:如果您只是对列表进行两次排序并按照您的描述进行交叉,您将得到与您开始时完全相同的列表,可能在不同的顺序。如果您将 sorting 一词更改为 filtering,那么它作为一种解决方案实际上是有意义的,尽管不是最佳的。
-
@Richardissimo 我不确定为什么我们得到相同的数组。该数组按开头排序一次,并在末尾排序。从每一个中我们找到满足标准的区间(即开始小于目标,结束大于目标),然后取这两者的交集。我知道这仍然表现不佳。只是澄清你提到的措辞。
-
@MarkMeyer 在问题中添加了更多信息以进一步澄清。这是因为可以预先计算数据,以回答随后的搜索。我必须澄清这一点。您的观点仅适用于一次运行。
标签: algorithm