Сложность: medium
Дан бинарный массив nums, из которого следует удалить один элемент.
Верните размер самой длинной непустой подмассивы, содержащей только 1, в результирующем массиве. Верните 0, если такого подмассива не существует.
Пример:
Input: nums = [0,1,1,1,0,1,1,0,1]
Output: 5
Explanation: After deleting the number in position 4, [0,1,1,1,1,1,0,1] longest subarray with value of 1's is [1,1,1,1,1].
👨💻 Алгоритм:
1⃣Инициализация переменных:
zeroCount для подсчёта нулей в текущем окне, longestWindow для хранения максимальной длины окна, содержащего не более одного нуля, и start для левой границы окна.
2⃣Итерация по массиву:
При каждом элементе увеличиваем zeroCount, если это ноль.
Если zeroCount превышает 1, сокращаем окно, перемещая левую границу вправо и уменьшая zeroCount, пока количество нулей не станет меньше или равно 1.
Обновляем longestWindow текущей длиной окна i - start.
3⃣Возврат результата:
Вернуть longestWindow.
😎 Решение:
class Solution {
func longestSubarray(_ nums: [Int]) -> Int {
var zeroCount = 0
var longestWindow = 0
var start = 0
for i in 0..<nums.count {
if nums[i] == 0 {
zeroCount += 1
}
while zeroCount > 1 {
if nums[start] == 0 {
zeroCount -= 1
}
start += 1
}
longestWindow = max(longestWindow, i - start)
}
return longestWindow
}
}Ставь 👍 и забирай 📚 Базу знаний