最小差异

时间:2012-09-13 08:03:14

标签: algorithm

考虑有k个列表,其中数字按递增顺序排列。从每个列表中选择一个数字,使输出列表中最高数字和最低数字之间的差异最小:

list 1-1,3,5,9,10
list 2-2,4,6,8
list 3-7,11,12,13

输出应为5,6,7。

从列表-2中选择

5,从列表-2中选择6,从列表-3中选择7

由于该列表中最高和最低数字之间的差异是2,即7-5,因此考虑有k列表。

1 个答案:

答案 0 :(得分:2)

我可以在O(N*LogK)中解决此问题,此处N是k列表中的总数。

1,从0开始为每个列表维护一个指针。

2,将当前指针视为您选择的数字,更新答案。

3,选择编号最小的编号并将其增加1(只要它没有到达该列表的末尾),如果可能,返回步骤2,否则终止。

在步骤2和步骤3中,使用堆来保持最小数量和最大值,从而将时间从O(K)减少到O(LogK)