最大连续 1 的个数 题目描述: 思路 代码 网友思路

toc

给定一个二进制数组, 计算其中最大连续 1 的个数。

示例:

输入:[1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.

提示:

输入的数组只包含 0 和 1 。
输入数组的长度是正整数,且不超过 10,000。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/max-consecutive-ones
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

常规思路,遍历输入数组,
遇1增加当前连续个数,并进入下次循环,
遇0比较最大连续个数与当前连续个数,并按条件更新最大连续个数,随后清零当前连续个数,继续循环寻找1
数组末元素也许不是0,结束遍历后,需再比较保存最大连续个数

代码

class Solution {
public:
    int findMaxConsecutiveOnes(std::vector<int>& nums){
        int iMaxCount = 0;
        int iCurrentCount = 0;
        for(auto& elem : nums){
            if(elem == 1){
                iCurrentCount++;
                continue;
            }
            if(iCurrentCount > iMaxCount){
                iMaxCount = iCurrentCount;            
            }
            iCurrentCount = 0;
        }
        if(iCurrentCount > iMaxCount){
            iMaxCount = iCurrentCount;
            iCurrentCount = 0;
        }

        return iMaxCount;
    }
};

最大连续 1 的个数
题目描述:
思路
代码
网友思路

网友思路

提交后,看了下网友的解题思路,有使用到滑动窗口,感觉很棒,学习一下,思路如下:
定义左右窗口指针并初始化为0,
遍历输入数组,遇到1则不断移动右指针,直到遇到0,
此时,计算连续1个数为右左指针差,比较保存最大连续1个数,
接着将左指针指向右指针处,
最后继续循环
循环结束后,比较保存最大连续1个数