我有一个算法问题。给出k组整数> 0(必须大小不一样),我必须从每组中选择一个k数字,以便最大值和最小值之间的差值最小。 例: k = 5
设置1:89 45 22 16
设置2:89 34
设置3:37 62 89
设置4:89 96
设置5:89 91 94
答案:从所有组中选择89差异0。
示例2(更难) k = 5
设置1:12 19 44 52 59 100
设置2:35 60 90 94 98 101
设置3:48 49 57 64 78 90
设置4:15 38 56 90 97
设置5:54 58 59 89 202
答案:k元素被选中:52,60,57,56,54)差异60-52 = 8.
有关如何处理的任何建议?
答案 0 :(得分:2)
您可以按照以下方式执行此操作:
setUnion
currentBest
差异初始化为联合的最大和最小元素之间的距离setUnion
的每个元素,请浏览原始K
集,并找到大于或等于它的最接近元素。您将拥有一组最多K
个数字。找到他们的min
和max
,并根据currentBest
差异currentBest
将解答您的问题。如果联合的大小为N
并且您使用K
集的有序表示,则此算法会在O(N*K*LogN)
时间内找到答案。