1493. Longest Subarray of 1's After Deleting One Element

1. Description

Given a binary array nums, you should delete one element from it.
Return the size of the longest non-empty subarray containing only 1’s in the resulting array. Return 0 if there is no such subarray.

2. Example

Example 1

Input: nums = [1,1,0,1]
Output: 3
Explanation: After deleting the number in position 2, [1,1,1] contains 3 numbers with value of 1’s.

Example 2

Input: nums = [0,1,1,1,0,1,1,0,1]
Output: 5
Explanation: After deleting the number in position 4, [0,1,1,1,1,1,0,1] longest subarray with value of 1’s is [1,1,1,1,1].

Example 3

Input: nums = [1,1,1]
Output: 2
Explanation: You must delete one element.

3. Constraints

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

4. Solutions

Sliding Window

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

class Solution {
public:
    int longestSubarray(const vector<int> &nums) {
        int max_ones = 0;
        for (int left = 0, right = 0, zero_count = 0; right < nums.size(); ++right) {
            zero_count += nums[right] == 0;

            while (zero_count > 1) {
                if (nums[left] == 0) {
                    --zero_count;
                }
                ++left;
            }
            max_ones = max(right - left, max_ones);
        }
        return max_ones;
    }
};
comments powered by Disqus