日新刷题 - 485. 最大连续 1 的个数

147 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情

一、题目描述:

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.

二、思路分析:

今天的题目比较简单,一遍for循环就好。我们在遍历的过程中记录连续1的个数,遇到0就把计数count清零。因为题目只要求最大值,所以我们保留住最大值就好,要用max函数。

容易错的点是最后一位的处理。一般的想法是遇到0,就把计数器count处理一下。但如果最后一位是1,最后一个计数器count的数值就没被处理。为了避免这种情况,我们在写判断条件的时候要判断是不是到了最后一位。

三、AC 代码:

class Solution {
public:
    int findMaxConsecutiveOnes(vector<int>& nums) { // 模拟法
        if (nums.size() == 0) return 0; // 特判
        int maxNum = 0;
        int count = 0;
        for (int i = 0; i < nums.size(); i++) { // 遍历一遍
            if (nums[i] == 1) { // 遇到1,就计数+1
                count++;
            }
            if (nums[i] == 0 || i == nums.size() - 1) { // 遇到0或者是最后一位了
                maxNum = max(maxNum, count); // 找到最大的数值,仅关注最大count即可
                count = 0; // 清零
            }
        }
        return maxNum;
    }
};

四、参考:

不想用循环的办法(不知道有什么问题) - 最大连续 1 的个数 - 力扣(LeetCode)

一次遍历,保存遇到的最后一个 0 的位置 - 最大连续 1 的个数 - 力扣(LeetCode)

Java #485 最大连续1的个数 - 滑动窗口算法 - 1ms, 战胜100%【GIF图解】 - 最大连续 1 的个数 - 力扣(LeetCode)