您有k
个排序整数列表。查找包含每个k
列表中至少一个数字的最小范围。
例如,
List 1: [4, 10, 13, 14]
List 2: [0, 9, 15, 18]
List 3: [5, 18, 22, 30]
此处的最小范围为[14, 18]
,因为它包含来自14
的{{1}},来自list 1
的{{1}}和来自{{15
的{{1}} 1}}。
我的方法是:
list 2
列表中的第一个元素但我面临的唯一问题是:假设一个列表中没有剩余的元素,我应该在那里完成还是应该继续?
答案 0 :(得分:5)
非常好的O(n log n)算法!
你可以在那里完成,因为你永远不会找到满足给定条件的更好的区间“包含每个k列表中至少一个数字的范围”。
假设您要离开当前最小值m
(某些列表中的最后一个元素),而是从另一个列表中删除某些内容(不是最小值)。在这种情况下,范围只能增长(因为范围的最小值由m
确定)。所以没有必要这样做,你可以停止你的算法。
答案 1 :(得分:0)
不,这不是你的终止条件。看看这个例子:
1: [0]
2: [1]
范围非常清楚[0,1]
,但如果您在检测到空列表后立即停止,则会返回[0,0]
。
因此,只有当您知道所有k
列表中的值和,其中一个列表的项目已用完时,您才能停止。如果您分别跟踪每个列表的最小值和最大值,这应该非常简单,因为您可以确保每个列表都有一些最小值和最大值。