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