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 。
67 1
|
5月前
|
算法
【LeetCode】每日一题&&两数之和&&寻找正序数组的中位数&&找出字符串中第一个匹配项的下标&&在排序数组中查找元素的第一个和最后一个位置
【LeetCode】每日一题&&两数之和&&寻找正序数组的中位数&&找出字符串中第一个匹配项的下标&&在排序数组中查找元素的第一个和最后一个位置
|
4天前
给定一个长度为n的数组,请将数组中元素按照奇偶性重新划分,所有奇数靠左边,所有偶数靠右边,然后分别对奇数、偶数部分进行排序
给定一个长度为n的数组,请将数组中元素按照奇偶性重新划分,所有奇数靠左边,所有偶数靠右边,然后分别对奇数、偶数部分进行排序
20 1
|
4天前
leetcode代码记录(长度最小的子数组
leetcode代码记录(长度最小的子数组
10 0
|
4天前
代码随想录 Day44 动规12 LeetCode T300 最长递增子序列 T674 最长连续递增序列 T718 最长重复子数组
代码随想录 Day44 动规12 LeetCode T300 最长递增子序列 T674 最长连续递增序列 T718 最长重复子数组
44 0
|
4天前
|
存储 算法 Java
给定一个二叉树,请你找出其中最长严格递增路径的长度。(提示:使用动态规划)
给定一个二叉树,请你找出其中最长严格递增路径的长度。(提示:使用动态规划)
16 0
|
4天前
最长连续不重复子序列
最长连续不重复子序列
16 1
|
4天前
|
人工智能
leetcode-718:最长重复子数组
leetcode-718:最长重复子数组
31 0
|
10月前
|
算法 C语言 C++
【前缀和】1588. 所有奇数长度子数组的和
【前缀和】1588. 所有奇数长度子数组的和
78 0
|
12月前
|
人工智能 算法
51nod 1202 子序列个数 (不重复子序列个数)
51nod 1202 子序列个数 (不重复子序列个数)
65 0