1004. Max Consecutive Ones III

Given a binary array nums and an integer k, return the maximum number of consecutive 1's in the array if you can flip at most k 0's.

    def longestOnes(self, nums: List[int], k: int) -> int: 
        N = len(nums) 
        nZeros = 0 
        i = 0  
        res = 0 
         
        for j in range(N): 
            nZeros += (nums[j]) == 0 
            while nZeros > k: 
                nZeros -= (nums[i] == 0) 
                i += 1 
            res = max(j - i + 1, res) 
             
        return res

A harder to understand version

    def longestOnes(self, nums: List[int], k: int) -> int: 
        N = len(nums) 
        nZeros = 0 
        i = 0 
        res = 0 
         
        for j in range(N): 
            nZeros += (nums[j]) == 0 
            if nZeros > k: 
                nZeros -= (nums[i] == 0) 
                i += 1 
        return j - i + 1