一、题目描述:487. 最大连续1的个数 II(中等)
给定一个二进制数组,你可以最多将 1 个 0 翻转为 1,找出其中最大连续 1 的个数。
示例 1:
输入:[1,0,1,1,0]
输出:4
解释:翻转第一个 0 可以得到最长的连续 1。
当翻转以后,最大连续 1 的个数为 4。
注:
输入数组只包含 0 和 1.
输入数组的长度为正整数,且不超过 10,000
---------------------
版权声明:本文为博主原创文章,转载请附上博文链接!
二、解题思路
1、定义left =0,rigth = 0两个偏移量,0的个数统计变量zero = 0。统计当前包含一个0的连续1最长长度值count = 0;
2、遍历数组,right往右偏移。循环right遇到0则累加zero,当zero>1的时候,left往右偏移,left遇到0则zero减1,直到zero<=1。反之遇到1则不管,相当于right累加(此时还不需要做任何操作),在最后只有当zero<=1的时候,开始判断right-left是否大于count,如果大于count,赋值给count。right++进入下一个循环。
三、代码
class Solution(object):
def findMaxConsecutiveOnes(self, nums):
"""
:type nums: List[int]
:rtype: 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