持续创作,加速成长!这是我参与「掘金日新计划 · 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)