Problem Statement

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:

Problem Link

Max Consecutive Ones III - LeetCode

Reference Video

https://www.youtube.com/watch?v=QPfalDbqa4A

Code

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;
        
    }
};