考虑有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列表。
答案 0 :(得分:2)
我可以在O(N*LogK)
中解决此问题,此处N
是k列表中的总数。
1,从0开始为每个列表维护一个指针。
2,将当前指针视为您选择的数字,更新答案。
3,选择编号最小的编号并将其增加1(只要它没有到达该列表的末尾),如果可能,返回步骤2,否则终止。
在步骤2和步骤3中,使用堆来保持最小数量和最大值,从而将时间从O(K)
减少到O(LogK)
。