Max Consecutive Ones

https://leetcode.com/explore/learn/card/fun-with-arrays/523/conclusion/3230

这道题是每个1的group之间最多间隔1个0,题目generalize成每个1的group之间最多间隔k个

间隔为1的解法:

class Solution:
    def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
        prev = -1
        curr = 0
        res = 0
        for num in nums:
            if num == 0:
                prev= curr
                curr = 0
            else:
                curr+=1
            res = max(res,prev+curr+1)
        return res

间隔为K的解法,sliding window的套路,当zero count超过k,头指针i就向前

class Solution:
    def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
        k=1
        res = 0
        zero = 0
        i = 0
        for j,num in enumerate(nums):
            if num == 0:
                zero+=1
            while zero > k:
                if nums[i] == 0:
                    zero-=1
                i+=1
            res = max(res,j-i+1)
        return res
        
        

Last updated

Was this helpful?