给定k组整数找到所选择的k个元素之间的最小差异

时间:2013-04-11 15:51:22

标签: c

我有一个算法问题。给出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.

有关如何处理的任何建议?

1 个答案:

答案 0 :(得分:2)

您可以按照以下方式执行此操作:

  • 使用所有集合的联合构建setUnion
  • currentBest差异初始化为联合的最大和最小元素之间的距离
  • 对于setUnion的每个元素,请浏览原始K集,并找到大于或等于它的最接近元素。您将拥有一组最多K个数字。找到他们的minmax,并根据currentBest差异
  • 进行检查
  • 完成后currentBest将解答您的问题。

如果联合的大小为N并且您使用K集的有序表示,则此算法会在O(N*K*LogN)时间内找到答案。