题目
给定一个二进制数组 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.
思路
一个常规的解法是,每遇到一个就更新以当前
结尾的最长的连续
的长度,遇到
了就将长度归零。
也可以套用滑窗模板,窗口右边界尽可能向右扩展,遇到
时更新最大长度,然后移动左边界。
代码
常规遍历
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int n = nums.length;
int ans = 0;
int cnt = 0;
for (int i = 0; i < n; i++) {
if (nums[i] == 1) {
cnt++;
ans = Math.max(ans, cnt);
} else {
cnt = 0;
}
}
return ans;
}
}
滑窗
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int n = nums.length;
int left = 0;
int right = 0;
int ans = 0;
while (right < n) {
while (right < n && nums[right] == 1) {
right++;
}
// 此时right指向连续1右边的第一个0,“刚好出界”,left指向最左边1,因此right-left刚好为连续1的长度
ans = Math.max(ans, right - left);
// 注意下面两句的顺序不可颠倒
right++;
left = right;
}
return ans;
}
}