Найти последний подмассив в O (n):
Например, для массива [1, 2, 3, 2, 2, 1, 1]
получить количество элементов в хэш-таблице / карте (или массиве длямаленький диапазон): { 1: 3, 2: 3, 3: 1 }
Чтобы найти начальный индекс подмассива, начните с первого значения в массиве и проверьте, является ли его число больше 1. Если это число больше 1, уменьшите егосчитать на единицу и переходить к следующему значению до значения со счетом 1. Повторите то же самое в обратном направлении, чтобы найти последний индекс подмассива:
1, 2, 3, 2, 2, 1, 1
^ ^
Найти остальные подмассивы в O(n):
Теперь, чтобы проверить, является ли это минимальным подмассивом, проверьте наличие подмассивов перед ним.Для этого ищите перед первым индексом последний индекс значения 1, который находится в последнем индексе.Если он найден, измените на него первый индекс и уменьшите последний индекс на единицу:
1, 2, 3, 2, 2, 1, 1
^ ^
Теперь, чтобы найти последний индекс нового подмассива, ищите значение между первым и последним индексом для значения.2, который находится в последнем индексе, и измените последний индекс на него:
1, 2, 3, 2, 2, 1, 1
^ ^
Повторяйте, пока не будет найдено значение последнего индекса между первым и последним индексом:
1, 2, 3, 2, 2, 1, 1
^ ^
Теперь проверьте, меньше ли счетчик нового подмассива, чем у предыдущего подмассива, и при необходимости обновите индексы текущего минимального подмассива.
Поиск остальных подмассивов необходимо повторитьпока значение последнего индекса не может быть найдено до первого индекса.