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 <= 105
nums[i]
is either 0
or 1
.0 <= k <= nums.length
class Solution {
fun longestOnes(nums: IntArray, k: Int): Int {
var onesCount = 0
var max = 0
var start = 0
for (end in nums.indices) {
if (nums[end] == 1) {
onesCount++
}
if (end - start + 1 > onesCount + k) {
if (nums[start] == 1) {
onesCount--
}
start++
}
max = max.coerceAtLeast(end - start + 1)
}
return max
}
}