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 either0
or1
.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;
};