LeetCode_滑动窗口_中等_1493.删掉一个元素以后全为 1 的最长子数组

目录

1.题目

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

提示 1:

输入:nums = 1,1,0,1

输出:3

解释:删掉位置 2 的数后,1,1,1 包含 3 个 1 。

示例 2:

输入:nums = 0,1,1,1,0,1,1,0,1

输出:5

解释:删掉位置 4 的数字后,0,1,1,1,1,1,0,1 的最长全 1 子数组为 1,1,1,1,1

示例 3:

输入:nums = 1,1,1

输出:2

解释:你必须要删除一个元素。

提示:

1 <= nums.length <= 105

numsi 要么是 0 要么是 1 。

2.思路

(1)滑动窗口

3.代码实现(Java)

java 复制代码
//思路1------------滑动窗口
class Solution {
    public int longestSubarray(int[] nums) {
        int n = nums.length;
        // arr[0]、arr[1] 分别保存滑动窗口内 0、1 的数量
        int[] arr = new int[2];
        int left = 0;
        int right = 0;
        int res = 0;
        while (right < n){
            int inC = nums[right++];
            arr[inC]++;
            //保证滑动窗口中的 0 的数量不超过 1
            while (arr[0] > 1){
                int outC = nums[left++];
                arr[outC]--;
            }
            res = Math.max(res, arr[0] == 0 ? arr[1] - 1 : arr[1]);
        }
        return res;
    }
}
相关推荐
To_OC5 天前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode
To_OC5 天前
LC 208 实现 Trie 前缀树:曾被名字劝退,写完发现是送分题
javascript·算法·leetcode
To_OC6 天前
LC 994 腐烂的橘子:人人都说是 BFS 入门题,我却写了三遍才过
javascript·算法·leetcode
To_OC6 天前
LC 200 岛屿数量:经典 DFS 入门题,我第一次写居然连方向都搞错了
javascript·算法·leetcode
To_OC7 天前
LC 128 最长连续序列:别上来就排序,O (n) 解法才是这题的灵魂
javascript·算法·leetcode
To_OC9 天前
LC 49 字母异位词分组:想到哈希表很简单,选对 key 才是精髓
javascript·算法·leetcode
To_OC10 天前
LC 1 两数之和:面试第一道必考题,暴力解法直接被面试官 pass
javascript·算法·leetcode
想吃火锅100516 天前
【leetcode】121.买卖股票的最佳时机js/c++
算法·leetcode·职场和发展
凌波粒16 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
退休倒计时16 天前
【每日一题】LeetCode 146. LRU 缓存 TypeScript
算法·leetcode·缓存·typescript