Учитывая массив целых чисел N, как вы можете найти подмножество размера K с ближайшими друг к другу элементами?
Пусть близость для подмножества (x1, x2, x3,.. xk) определяется как:
2 <= N <= 10^5
2 <= K <= N
: Массив может содержать дубликаты и не может быть отсортирован.
Решение для грубой силы очень велико для больших N, и оно не проверяет, существует ли более 1 решение:
N = input()
K = input()
assert 2 <= N <= 10**5
assert 2 <= K <= N
a = []
for i in xrange(0, N):
a.append(input())
a.sort()
minimum = sys.maxint
startindex = 0
for i in xrange(0,N-K+1):
last = i + K
tmp = 0
for j in xrange(i, last):
for l in xrange(j+1, last):
tmp += abs(a[j]-a[l])
if(tmp > minimum):
break
if(tmp < minimum):
minimum = tmp
startindex = i #end index = startindex + K?
<сильные > Примеры:
N = 7
K = 3
array = [10,100,300,200,1000,20,30]
result = [10,20,30]
N = 10
K = 4
array = [1,2,3,4,10,20,30,40,100,200]
result = [1,2,3,4]