给定 N 非负整数的 X ,找到大小为 K 的子集 L L 的每对连续元素之间的距离之和(由 S(L)表示)最小, L 不包含重复项。我们知道2 <= N <= 10^5
,2 <= K < N
, X 未排序且可能包含重复项。
注意:
两个连续元素 Xi 和 Xj 之间的距离(对于 K 中的 i > - 1]; [ i + 1, K ]中的 j 表示为d(i, j)
,这是绝对值 Xi 和 Xj 的区别:|Xj - Xi|
。
必须保留原始集合 S 的元素的相对顺序,即不允许对 X 进行排序。类似的问题被问到here,但所有建议的解决方案都需要排序程序。
示例:
输入:
S = {1,3,10,3,6,7,1}
K = 4
输出:
L = {1,3,6,7}( S(L) = d (1,2)+ d (2,3)+ d (3,4)= 2 + 3 + 1 = 6)。
请注意,两组 L1 = {3,6,1,7}和 L = {1,3,6,7}是相同的,但每组set得到不同的和( S(L1) = 3 + 5 + 6 = 14
&gt; 6
= S(L))。因此,正确的总和必须是 L 排序后获得的总和。