1004. Max Consecutive Ones III

Medium

Given a binary array nums and an integer k, return the maximum number of consecutive 1's in the array if you can flip at most k 0's.

Example 1:

Input: nums = [1,1,1,0,0,0,1,1,1,1,0], k = 2
Output: 6
Explanation: [1,1,1,0,0,1,1,1,1,1,1]
Bolded numbers were flipped from 0 to 1. The longest subarray is underlined.

Example 2:

Input: nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], k = 3
Output: 10
Explanation: [0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
Bolded numbers were flipped from 0 to 1. The longest subarray is underlined.

Constraints:

  • 1 <= nums.length <= 10^5

  • nums[i] is either 0 or 1.

  • 0 <= k <= nums.length

解題

func longestOnes(nums []int, k int) int {
    if len(nums) == k { return k }

    zero, ans := 0, 0
    left, right := 0, 0

    for right < len(nums) {
        if nums[right] == 0 { zero++ }

        for zero > k && left < right {
            if nums[left] == 0 { zero-- }
            left++
        }

        if right-left+1 > ans && right-left+1-zero != 0 { 
            ans = right-left+1
        }

        right++
    }

    return ans
}

Last updated