Sunday, April 11, 2021

1004. Max Consecutive Ones III

 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 {
public:
    
    int longestOnes(vector<int>& A, int k) {
        // base cases about k.
        if (A.size() == 0) {
            return 0;
        }
        int ans = 0;
        int st = 0, end = 0;
        int zeros = 0;
        while (end < A.size()) {
            if (A[end] == 0) {
                zeros++;
            }
            if (zeros == k) {
                ans = max(ans, end - st + 1);
            }
            while (zeros > k && st <= end) {
                if (A[st] == 0) {
                    zeros--;
                }
                st++;
            }
            end++;
        }
        ans = max(ans, end - st);
        return ans;
    }
};

No comments:

Post a Comment