一、题目描述: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
针对LeetCode上的487.最大连续1的个数II问题,介绍了一种滑动窗口算法。该算法通过定义两个偏移量left和right以及计数变量zero来追踪并更新最大连续1的个数,当遇到第二个0时调整窗口大小,确保在数组中找到最长的连续1序列。
&spm=1001.2101.3001.5002&articleId=96609679&d=1&t=3&u=3fecb8371d9742e0b11210a41488d0f1)
993

被折叠的 条评论
为什么被折叠?



