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

nums[i] 要么是 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;
    }
}
相关推荐
EXtreme3538 分钟前
栈与队列的“跨界”对话:如何用双队列完美模拟栈的LIFO特性?
c语言·数据结构·leetcode·双队列模拟栈·算法思维
拼好饭和她皆失2 小时前
高效算法的秘诀:滑动窗口(尺取法)全解析
数据结构·算法·滑动窗口·尺取法
元亓亓亓2 小时前
LeetCode热题100--739. 每日温度--中等
python·算法·leetcode
小白程序员成长日记2 小时前
2025.12.11 力扣每日一题
数据结构·算法·leetcode
天赐学c语言2 小时前
12.11 - 最长回文子串 && main函数是如何开始的
c++·算法·leetcode
长安er2 小时前
LeetCode 100/101/110/199 对称/平衡二叉树与右视图
算法·leetcode·二叉树·dfs·bfs·递归
程序员-King.2 小时前
day122—二分查找—完成旅途的最少时间(LeetCode-2187)
算法·leetcode·二分查找·双指针
Swift社区2 小时前
LeetCode 447 - 回旋镖的数量
linux·算法·leetcode
java修仙传2 小时前
力扣hot100:路径总和III
数据结构·算法·leetcode
leoufung3 小时前
题目介绍:LeetCode 79. Word Search
leetcode·word·深度优先