繁体   English   中英

如何从每个排序列表中选择一个数字,以使最小值和最大值之间的差异尽可能小? [关闭]

[英]How to pick one number from each sorted list so that the difference between the minimum and maximum is as small as possible? [closed]

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

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

输出应该是 5,6,7。

从 list-l 中选择 5,从 list-2 中选择 6,从 list-3 中选择 7

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

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

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

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

3、选择数量最少的一个,加一(只要没到那个列表的末尾),如果可能,返回第2步,否则终止。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM