开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天,点击查看活动详情
一、题目描述:
给定一个二进制数组 nums , 计算其中最大连续 1 的个数。
示例 1:
输入:nums = [1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.
示例 2:
输入:nums = [1,0,1,1,0,1]
输出:2
提示:
- 1 <= nums.length <= 10^5
- nums[i] 不是 0 就是 1.
二、思路分析:
首先这个题我就想到的是滑动窗口,通过对数组进行遍历,通过窗口来维持数组中连续的1,并记录此时窗口中1的个数 在维持窗口的过程中不断的保留最长的1的个数 当遇到非1的数时,初始化之前记录的1的个数,按照当前right的下标所代表的数,来判断是否移动right 如果当前right所指的数是不是1,那么就移动到下一位,如果当前right是1,那么就保持不动
三、AC 代码:
class Solution {
public:
int findMaxConsecutiveOnes(vector<int>& nums) {
int res = 0; //记录数组中的最多的连续1的个数
int index = 0; //记录窗口中1的个数
int left = 0, right = 0; //窗口的边界
//对数组中的1进行遍历处理
while (right < nums.size()) {
//如果窗口中的数都是1
if (nums[right] == nums[left] && nums[left] == 1) {
right ++; //扩大窗口
index ++; //窗口个数加1
}else {
index = 0; //跟新窗口中1的个数
left = right; //左窗口移到右窗口的位置
//按照不同的情况来判断右窗口是否移动
nums[right] == 1 ? right = right : right ++;
}
//随时记录窗口中1的个数
res = max(res, index);
}
return res;
}
};
四、参考:
485. 最大连续 1 的个数 - 简单,简单,简单的模拟题 - 最大连续 1 的个数 - 力扣(LeetCode)
485. 最大连续1的个数-Python-一次遍历/双指针/字符串分割 - 最大连续 1 的个数 - 力扣(LeetCode)