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 <= 105nums[i] is either 0 or 1.0 <= k <= nums.lengthMax Consecutive Ones III - LeetCode
https://www.youtube.com/watch?v=QPfalDbqa4A
class Solution {
public:
int longestOnes(vector<int>& nums, int k) {
int n = nums.size();
if(n==0)
return 0;
int i = 0;
int j;
int maxlen = 0;
int zeroes = 0;
for(j=0;j<n;j++)
{
if(nums[j]==0)
zeroes++;
while(zeroes>k)
{
if(nums[i]==0) //relaese the zeroes
zeroes--;
i++;
}
maxlen = max(maxlen,j-i+1);
}
return maxlen;
}
};