这道题目可以完全转化为滑动窗口问题,等价于求一个区间内,最多含有一个0的区间长度-1,可以用滑动窗口解决。维护一个区间,使得区间内的0的个数始终为1,求这个区间的最大长度即可。
class Solution {
public int longestSubarray(int[] nums) {
int res = 0;
int k = 0;
for(int i=0,j=0;j<nums.length;j++) {
if (nums[j] == 0) k++;
while (k > 1 && i < nums.length) {
if (nums[i] == 0) k--;
i++;
}
res = Math.max(res,j-i+1);
}
return res-1;
}
}