Я пытаюсь придумать быстрый алгоритм для любого массива длины n для получения наибольшего подмассива различных значений.
Например, самый большой подмассив различных значений
[1, 4, 3, 2, 4, 2, 8, 1, 9]
будет
[4, 2, 8, 1, 9]
Это мое текущее решение, я думаю, оно работает в O (n ^ 2). Это связано с тем, что check_dups выполняется за линейное время и вызывается каждый раз, когда увеличивается j или i.
arr = [0,...,n]
i = 0
j = 1
i_best = i
j_best = j
while i < n-1 and j < n:
if check_dups(arr, i j): //determines if there's duplicates in the subarray i,j in linear time
i += 1
else:
if j - i > j_best - i_best:
i_best = i
j_best = j
j += 1
return subarray(arr, i_best, j_best)
У кого-нибудь есть лучшее решение по линейному времени?
Обратите внимание, что это псевдокод, и я не ищу ответ, который опирается на конкретные существующие функции определенного языка (например, arr.contains ()).
Спасибо!