每日一题:485. 最大连续 1 的个数

66 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天,点击查看活动详情

一、题目描述:

485. 最大连续 1 的个数

给定一个二进制数组 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)