侧边栏壁纸
博主头像
GabrielxD

列車は必ず次の駅へ。では舞台は?私たちは?

  • 累计撰写 675 篇文章
  • 累计创建 128 个标签
  • 累计收到 26 条评论

目 录CONTENT

文章目录

【遍历】最大连续 1 的个数 II

GabrielxD
2022-06-11 / 0 评论 / 0 点赞 / 228 阅读 / 310 字
温馨提示:
本文最后更新于 2022-07-26,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

题目

487. 最大连续1的个数 II


给定一个二进制数组 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;
    }
}
0

评论区