开启掘金成长之旅!这是我参与「掘金日新计划 · 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)