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

/*
@v7fgg
执行用时:2 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:48.7 MB, 在所有 Java 提交中击败了100.00%的用户
2020年6月29日 22:13
*/
class Solution {
    public int longestSubarray(int[] nums) {
        List<Integer> one=new ArrayList<>();
        List<Integer> zero=new ArrayList<>();
        int start=0;
        for(int i=0;i<nums.length;i++){
            if(nums[i]==1){
                start=i;
                break;
            }
        }
        int ones=0;
        int zeros=0;
        while(start<nums.length){
            while(start<nums.length&&nums[start]==1){
                ones++;
                start++;
            }
            if(ones>0){one.add(ones);}            
            ones=0;
            while(start<nums.length&&nums[start]==0){
                zeros++;
                start++;
            }
            if(zeros>0){zero.add(zeros);}            
            zeros=0;
        }
        if(one.size()==0){return 0;}
        if(one.size()==1){
            if(zero.size()==0&&nums[0]!=0){return one.get(0)-1;}
            return one.get(0);
        }
        int ans=0;
        for(int i=0;i<one.size()-1;i++){
            if(zero.get(i)==1){
                ans=Math.max(ans,one.get(i)+one.get(i+1));
            }
            else{
                ans=Math.max(ans,one.get(i));
            }
        }
        return Math.max(ans,one.get(one.size()-1));
    }
}

版权声明:本文为zhuruihe2014原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。