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

简介: 1493.删掉一个元素以后全为1的最长子数组

题目:给一个二进制数组nums,从中删掉一个元素。

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

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

解题思路:典型的滑动窗口问题,可以通过遍历数组并使用两个指针来解决,一个指针代表窗口的开始,另一个指针代表窗口的结束。当窗口全为1时,尝试扩大窗口直到遇到0为止,并记录下此时窗口的最大长度。

class Solution{
    public int longestSubarray(int[] nums){
        int ans=0;
        int p0=0,p1=0;
        for(int num:nums){
            if(num==0){
                p1=p0;
                p0=0;            
            } else{
                ++p0;
                ++p1;            
            }       
            ans=Math.max(ans,p1);
        }
        if(ans==nums.length){
            --ans;        
        }    
        return ans;
    }
}


相关文章
|
4月前
|
设计模式 算法 Java
【数据结构和算法】删掉一个元素以后全为 1 的最长子数组
这是力扣的 1493 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。又又又是一道滑动窗口的典型例题,可以帮助我们巩固滑动窗口算法。这道题很活灵活现,需要加深对题意的变相理解。给你一个二进制数组nums,你需要从中删掉一个元素。 请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。 如果不存在这样的子数组,请返回 0 。
91 1
|
4月前
|
存储
【题型总结】寻找满足字符出现奇数次/偶数次的子串个数或者子串最长长度
【题型总结】寻找满足字符出现奇数次/偶数次的子串个数或者子串最长长度
77 0
|
9月前
|
算法
【LeetCode】每日一题&&两数之和&&寻找正序数组的中位数&&找出字符串中第一个匹配项的下标&&在排序数组中查找元素的第一个和最后一个位置
【LeetCode】每日一题&&两数之和&&寻找正序数组的中位数&&找出字符串中第一个匹配项的下标&&在排序数组中查找元素的第一个和最后一个位置
|
4月前
leetcode代码记录(长度最小的子数组
leetcode代码记录(长度最小的子数组
26 0
|
4月前
|
Python C++ Java
C/C++每日一练(20230417) 字母异位词分组、右侧小于当前元素个数、加一
C/C++每日一练(20230417) 字母异位词分组、右侧小于当前元素个数、加一
43 0
C/C++每日一练(20230417) 字母异位词分组、右侧小于当前元素个数、加一
|
4月前
最长连续不重复子序列
最长连续不重复子序列
28 1
|
4月前
代码随想录 Day44 动规12 LeetCode T300 最长递增子序列 T674 最长连续递增序列 T718 最长重复子数组
代码随想录 Day44 动规12 LeetCode T300 最长递增子序列 T674 最长连续递增序列 T718 最长重复子数组
56 0
|
4月前
|
算法 测试技术 C#
前缀和+单调双队列+贪心:LeetCode2945:找到最大非递减数组的长度
前缀和+单调双队列+贪心:LeetCode2945:找到最大非递减数组的长度
|
算法 C语言 C++
【前缀和】1588. 所有奇数长度子数组的和
【前缀和】1588. 所有奇数长度子数组的和
90 0
长度最小的子数组
长度最小的子数组