LeetCode1493. 删掉一个元素以后全为 1 的最长子数组 [Medium]

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

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.

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.

Example 4:

Input: nums = [1,1,0,0,1,1,1,0,1]
Output: 4

Example 5:

Input: nums = [0,0,0]
Output: 0

Constraints:

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

题目:给你一个二进制数组 nums ,你需要从中删掉一个元素。请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。如果不存在这样的子数组,请返回 0

思路:滑窗,双指针。保证窗口中最多只有一个zero。

工程代码下载

class Solution {
public:
    int longestSubarray(vector<int>& nums) {
        int n = nums.size();
        int res = 0;
        for(int i = 0, j = 0, zero = 0; j < n; ++j){
            if(nums[j] == 0){
                zero += 1;
                while(zero > 1){
                    if(nums[i] == 0)
                        zero -= 1;
                    i += 1;
                }
            }
            // You must delete one element.
            res = max(res, j - i);
        }
        return res;
    }
};

lee215总结的相似滑窗问题:

  • 1358 Number of Substrings Containing All Three Characters
  • 1248 Count Number of Nice Subarrays
  • 1234 Replace the Substring for Balanced String
  • 1004 Max Consecutive Ones III
  • 930 Binary Subarrays With Sum
  • 992 Subarrays with K Different Integers
  • 904 Fruit Into Baskets
  • 862 Shortest Subarray with Sum at Least K
  • 209 Minimum Size Subarray Sum

你可能感兴趣的:(leetcode)