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.
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.
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.
1 <= nums.length <= 105
nums[i]
is either0
or1
.0 <= k <= nums.length
impl Solution {
pub fn longest_ones(nums: Vec<i32>, k: i32) -> i32 {
let mut l = 0;
let mut r = 0;
let mut count0 = 0;
let mut ret = 0;
while r < nums.len() {
if nums[r] == 0 {
count0 += 1;
while count0 > k {
if nums[l] == 0 {
count0 -= 1;
}
l += 1;
}
}
r += 1;
ret = ret.max(r - l);
}
ret as i32
}
}