Max Consecutive Ones II

Given a binary array, find the maximum number of consecutive 1s in this array if you can flip at most one 0.

Note:

  • The input array will only contain0and1.

  • The length of input array is a positive integer and will not exceed 10,000

Example

Input:
 [1,0,1,1,0]

Output:
 4

Explanation:
 Flip the first zero will get the the maximum number of consecutive 1s.
    After flipping, the maximum number of consecutive 1s is 4.

Note

滑动窗口,找最长包括最多k个0的窗口长度,这里k是1

两种写法,外循环分别是右边界和左边界,用左边界的时候会多算count,需要减回去并且跳出循环

类似上面那题

Code

class Solution {
    public int findMaxConsecutiveOnes(int[] nums) {
        int len = nums.length;
        int i = 0, count = 0;
        int res = 0;
        for (int j = 0; j < len; j++) {
            if (nums[j] == 0) {
                count++;
            }
            while (i < len && count > 1) {
                if (nums[i] == 0) {
                    count--;
                }
                i++;
            }
            res = Math.max(res, j - i + 1);
        }

        return res;
    }
}
class Solution {
    public int findMaxConsecutiveOnes(int[] nums) {
        int len = nums.length;
        int j = 0, count = 0;
        int res = 0;
        for (int i = 0; i < len; i++) {
            while (j < len && count <= 1) {
                if (nums[j] == 0) {
                    count++;
                }
                if (count > 1) {
                    count--;
                    break;
                }
                j++;
            }
            if (nums[i] == 0) {
                count--;
            }
            res = Math.max(res, j - i);
        }

        return res;
    }
}

Last updated