题目
给定一个二进制数组 nums
,如果最多可以翻转一个 0
,则返回数组中连续 1
的最大个数。
示例 1:
输入:nums = [1,0,1,1,0]
输出:4
解释:翻转第一个 0 可以得到最长的连续 1。
当翻转以后,最大连续 1 的个数为 4。
示例 2:
输入:nums = [1,0,1,1,0,1]
输出:4
提示:
1 <= nums.length <= 10^5
nums[i]
不是0
就是1
.
进阶:如果输入的数字是作为 无限流 逐个输入如何处理?换句话说,内存不能存储下所有从流中输入的数字。您可以有效地解决吗?
解题
方法一:遍历
思路
和[【遍历】最大连续 1 的个数](【遍历】最大连续 1 的个数.md)的方法二差不多,只不过这次换成了记录三个最近的 0 之间第一个 0 和第三个 0 相隔多少位。
代码
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int ans = 0;
int prev = 0, count = 0;
for (int num : nums) {
count++;
if (num == 0) {
prev = count;
count = 0;
}
ans = Math.max(ans, prev + count);
}
return ans;
}
}
评论区