leetcode_487 最大连续1的个数 II

110 阅读1分钟

要求

给定一个二进制数组,你可以最多将 1 个 0 翻转为 1,找出其中最大连续 1 的个数。

示例 1:

输入:[1,0,1,1,0]
输出:4
解释:翻转第一个 0 可以得到最长的连续 1。
     当翻转以后,最大连续 1 的个数为 4

注:

  • 输入数组只包含 0 和 1.
  • 输入数组的长度为正整数,且不超过 10,000   进阶:
  • 如果输入的数字是作为 无限流 逐个输入如何处理?换句话说,内存不能存储下所有从流中输入的数字。您可以有效地解决吗?

核心代码

class Solution:
    def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
        left,right = 0,0
        zero = 0
        res = 0
        for right in range(len(nums)):
            if nums[right] == 0:
                zero += 1
            while zero > 1:
                if nums[left] == 0:
                    zero -= 1
                left += 1
            res = max(res,right - left + 1)
        return res

image.png

解题思路:这道题和1004 最大连续1的个数 III的思路是一样的,只不过是这道题只能反转一个0,其余的解题思路都是一模一样的。