Учитывая массив String, находим размер ' кратчайшего диапазона индексов ', который просматривает весь уникальный путь.
Пример, A = { E, R, E, R, A, R, T, A }
, должно быть 5 .Как мы видим, диапазоны A[2] = E and A[6] = T
содержат все уникальные пути.(В этом случае E, R, A, T)
Я могу решить с помощью нескольких циклов, как показано ниже.(решено Kotlin.)
fun problem(array: Array<String>): Int {
if (array.isEmpty()) return 0
val unique = array.distinct()
var result = 200000
for (i in 0 until A.size) {
val tempSet = HashSet<String>()
val remaining = A.sliceArray(i until array.size)
var count = 0
while (true) {
tempSet.add(remaining[count])
if (unique.size == tempSet.size) break
count++
if (count == remaining.size) {
count = 200000
break
}
}
result = Math.min(result, count + 1)
}
return result
}
Но когда приходит большой массив (около 100 000), я не знаю, как сократить время.Как я могу это сделать?
Некоторые контрольные примеры:
[E, R, E, R, A, R, T, A] -> 5. Потому что [2..6] содержит все уникальные пути.(E, R, A, T)
[C, A, A, R, C, A, A, R] -> 3. Поскольку [3..5] содержитвсем уникальный путь.(C, A, R)
[R, T, A, R, A, R, E, R] -> 6. Поскольку [1..6] содержит все уникальныедорожка.(T, A, R, E)
[A, R, R, C, T, E, A, R] -> 5. Поскольку [2..6] содержитвсем уникальный путь.(R, C, T, E, A)