原文链接: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 <= 105
nums[i] 不是 0 就是 1.
题解
方法一:
解题思路:快慢指针,遇0更新慢指针
时间:2ms 空间:42MB
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int max=0,i=-1;//i是慢指针,k是快指针,-1是为了解决第一个元素为1的情况
for(int k=0;k<nums.length;k++){
//当快指针所对应的位置为1时,判断最大值
if(nums[k]==1){
max = Math.max(max,k-i);//k-i为连续1的个数
}
//遇到0时,更新慢指针
else i=k;
}
return max;
}
}
方法二:
解题思路:遍历一遍,count记录一次连续为1的长度,当遇到0时重置
时间:1ms 空间:42MB
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int max = 0, count = 0;
int n = nums.length;
for (int i = 0; i < n; i++) {
if (nums[i] == 1) {
count++;//仍然为1,count+1
} else {
//遇到0,重置count,同时更新当前的最大值
max = Math.max(max, count);
count = 0;
}
}
max = Math.max(max, count);
return max;
}
}