【发布时间】:2011-01-20 14:16:41
【问题描述】:
给定一个连续的整数范围流,如 [1,3]、[5,10]、[2,6]、... 当每个新范围出现时,我们需要检查现有范围,看看它是否与任何现有范围重叠,如果发现任何重叠,则删除所有重叠范围并插入合并范围。为此,我们需要一个有效的算法。请注意,范围一次出现一个,形成一个流......
在一次采访中被问到这个问题。想法?
目的是将重叠的范围合并为一个。例如,如果我们有 3 个按以下顺序排列的范围:[1,3]、[2,6]、[5,10]。然后我们先把前两个合并成[1,6],再和第三个合并成[1,10]。
【问题讨论】:
-
您的问题不清楚。您希望输出是像 [1,2,3,5,6,7,8,9,10,2,3,4,5,6] 这样的单个流吗?
-
@Jim Mischel:我假设每个元组都提供了一个范围的开始和结束,因此,在第一个元组之后,结果范围将包括 [1,2,3]。在第二个元组之后,结果范围将是 [1,2,3,5,6,7,8,9,10](没有 4)。
-
在我看来,可能的逻辑输出应该是合并重叠范围的(有序?)范围列表
-
目的是将重叠的范围合并为一个。例如,如果我们有 3 个按以下顺序排列的范围:[1,3]、[2,6]、[5,10]。然后我们先把前两个合并成[1,6],再和第三个合并成[1,10]。