文章目录
- 1. 题目
- 2. 解题
1. 题目
给定一个二进制数组,你可以最多将 1 个 0 翻转为 1,找出其中最大连续 1 的个数。
示例 1:
输入:[1,0,1,1,0]
输出:4
解释:翻转第一个 0 可以得到最长的连续 1。当翻转以后,最大连续 1 的个数为 4。注:
输入数组只包含 0 和 1.
输入数组的长度为正整数,且不超过 10,000
进阶:
如果输入的数字是作为 无限流 逐个输入如何处理?
换句话说,内存不能存储下所有从流中输入的数字。您可以有效地解决吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/max-consecutive-ones-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
class Solution {
public:int findMaxConsecutiveOnes(vector<int>& nums) {int k = 1, i = 0, j = 0, maxlen = 0;for( ; j < nums.size(); ++j){if(nums[j]==0){ k--;while(k < 0)//要维持窗口内可替换的次数 >= 0{if(nums[i++]==0)k++;}}maxlen = max(maxlen,j-i+1);}return maxlen;}
};
104 ms 33.5 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!