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