1004. Max Consecutive Ones III

Problem


Tags: Array, Binary Search, Sliding Window, Prefix Sum

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

Code

JS

// 1004. Max Consecutive Ones III (4/5/53463)
// Runtime: 88 ms (63.04%) Memory: 43.46 MB (94.82%) 

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var longestOnes = function(nums, k) {
    let position = 0, flip = 0, max = 0;
    
    for(let i = 0; i < nums.length; i++) {
        if(nums[i] === 0) flip++;
        
        while(flip > k) {
            if(nums[position] === 0) flip--;
            position++;
        }
        
        max = Math.max(max, i - position + 1);
    }
    
    return max;
};