题目:给一个二进制数组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; } }