diff --git a/src/sliding_window/longest_subarray_of_1s_after_deleting_one_element/__init__.py b/src/sliding_window/longest_subarray_of_1s_after_deleting_one_element/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/sliding_window/longest_subarray_of_1s_after_deleting_one_element/solution.py b/src/sliding_window/longest_subarray_of_1s_after_deleting_one_element/solution.py new file mode 100644 index 0000000..b60c81f --- /dev/null +++ b/src/sliding_window/longest_subarray_of_1s_after_deleting_one_element/solution.py @@ -0,0 +1,16 @@ +from typing import List + + +class Solution: + def longestSubarray(self, nums: List[int]) -> int: + left, max_length, zeros_counter = 0, 0, 0 + + for index in range(len(nums)): + if nums[index] == 0: + zeros_counter += 1 + while zeros_counter > 1: + if nums[left] == 0: + zeros_counter -= 1 + left += 1 + max_length = max(max_length, index - left) + return max_length diff --git a/tests/test_longest_subarray_of_1s_after_deleting_one_element.py b/tests/test_longest_subarray_of_1s_after_deleting_one_element.py new file mode 100644 index 0000000..370cd72 --- /dev/null +++ b/tests/test_longest_subarray_of_1s_after_deleting_one_element.py @@ -0,0 +1,17 @@ +import pytest +from src.sliding_window.longest_subarray_of_1s_after_deleting_one_element.solution import ( + Solution, +) + + +@pytest.mark.parametrize( + "nums, expected", + [ + ([1, 1, 0, 1], 3), + ([0, 1, 1, 1, 0, 1, 1, 0, 1], 5), + ([1, 1, 1], 2), + ], +) +def test_longest_subarray(nums, expected): + solution = Solution() + assert solution.longestSubarray(nums) == expected