删掉一个元素以后全为 1 的最长子数组

76 阅读1分钟

给你一个二进制数组 nums ,你需要从中删掉一个元素。

请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。

如果不存在这样的子数组,请返回 0 。

来源:力扣(LeetCode) 链接:leetcode.cn/problems/lo…

class Solution {
    public int longestSubarray(int[] nums) {
        // lsum 表示,在left的左侧有多少个非1的长度;
        // rsum表示 在right的左侧有多少个非1的长度
        int left = 0, lsum = 0, rsum = 0, ans = 0;
        for (int right = 0; right < nums.length; right++) {
        	rsum = rsum + 1 - (nums[right] == 1 ? 1 : 0);
            while (lsum < rsum - 1) {
                lsum += 1 - (nums[left] == 1 ? 1:0);
                ++left;
            }
            ans = Math.max(ans, right - left);
        }
        return ans;
    }
}