1004. Max Consecutive Ones III
Содержание
Задача
Дан массив A
состоящий из 0 и 1, и число K
. Найти максимальную длину подпоследовательности единиц, которую можно получить, преобразовав не более K
нулей в единицы.
Подсказки
Использование скользящего окна может значительно ускорить решение задачи.
Подход
- Инициализация: Создайте переменные для хранения начала и конца “окна” и максимальной длины подпоследовательности.
- Проход по массиву: Перемещайте “окно” по массиву, подсчитывая количество нулей внутри.
- Сдвиг окна: Если количество нулей превышает
K
, сдвигайте левый край окна, пока это не станет истиной. - Обновление максимума: На каждом шаге обновляйте максимальную длину подпоследовательности.
Этот метод является эффективным с точки зрения времени и простым для понимания.
Алгоритм
- Инициализируйте
start = 0
иmax_length = 0
. - Пройдите по массиву с индексом
end
. - Если элемент равен нулю, уменьшите
K
. - Пока
K < 0
, сдвигайтеstart
и увеличивайтеK
, если элемент равен нулю. - Обновите
max_length
.
Решение
def longestOnes(A, K):
start = 0
max_length = 0
for end in range(len(A)):
# Если нуль, уменьшим K
if A[end] == 0:
K -= 1
# Сдвигаем окно, если K отрицательно
while K < 0:
if A[start] == 0:
K += 1
start += 1
# Обновляем max_length
max_length = max(max_length, end - start + 1)
return max_length