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
Solved after hints.
Use a sliding window, make sure there are no more than k
0s inside the window.
Time complexity: o ( n ) o(n) o(n)
Space complexity: o ( n ) o(n) o(n)
class Solution:
def longestOnes(self, nums: List[int], k: int) -> int:
zero_cnt = 0
left = 0
res = 0
for right in range(len(nums)):
# put new item into window
if nums[right] == 0:
zero_cnt += 1
# check if need to shrink the window
while zero_cnt > k:
if nums[left] == 0:
zero_cnt -= 1
left += 1
res = max(res, right - left + 1)
return res