1004. Max Consecutive Ones III

1. Description

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.

2. Example

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.

3. Constraints

  • 1 <= nums.length <= $10^5$
  • nums[i] is either 0 or 1.
  • 0 <= k <= nums.length

4. Solutions

Sliding Window

n = nums.size()
Time complexity: O(n)
Space complexity: O(1)

class Solution {
public:
    int longestOnes(vector<int> &nums, int k) {
        int max_ones = 0;
        for (int left = 0, right = 0, zero_count = 0; right < nums.size(); ++right) {
            zero_count += (nums[right] == 0 ? 1 : 0);
            while (zero_count > k) {
                zero_count -= (nums[left] == 0 ? 1 : 0);
                ++left;
            }

            max_ones = max(max_ones, right - left + 1);
        }

        return max_ones;
    }
};
comments powered by Disqus