LeetCode - The World's Leading Online Programming Learning Platform

class Solution:
    def longestSubarray(self, nums: List[int]) -> int:
        start, using, longest = 0, 0, 0
				# 展開窗戶
        for end in range(len(nums)):
            if nums[end] == 0:
                using += 1
						# 縮小左指針,縮小窗戶
            while using > 1:
                if nums[start] == 0:
                    using -= 1
                start += 1
            longest = max(longest, end - start + 1)
        return longest - 1

TC: O(n), n for the length of nums

SC: O(1)

Sliding window