485. 最大连续 1 的个数

92 阅读1分钟

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

一、题目描述:

485. 最大连续 1 的个数 - 力扣(LeetCode)

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

二、思路分析:

声明两个变量,res1是用来存储在运行过程中1出现的次数,另一个是当为0的时候,用来储存上面生产的1的个数,每次遇到0,对他们两个进行比较,取最大的,使res1,归零,重新计算,到最后的Math.max(res1,res2),是为了防止,最后一次产生的值是最大的,所以最后在比较一下。

三、AC 代码:

class Solution {
    public int findMaxConsecutiveOnes(int[] nums) {
        int res1 = 0;
        int res2 = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == 1) {
                res1 ++;
            } else if (nums[i] == 0){
                if (res1 > res2) {
                    res2 = res1;
                    res1 = 0;
                } else {
                    res1 = 0;
                }
            }
        }
        return Math.max(res1,res2);
    }
}

四、总结:

双指针,快慢指针还是需要多练练。

官方解题思路优化的点

并不需要每次都比较是否是最大连续数量,只需要在不连续的时候清空连续数量之前去比较一下即可 循环退出之后还要计算一下呢,因为如果数组就都是连续,就不会进入清空的时候,那这个时候还没计算最大连续数量呢,所以需要计算一下

范文参考:

485. 最大连续1的个数-Python-一次遍历/双指针/字符串分割 - 最大连续 1 的个数 - 力扣(LeetCode)

又是一天「高频」简单题,你的「双指针」解法还熟吗 - 最大连续 1 的个数 - 力扣(LeetCode)