思路:题目是 数组和 >= target,不是等于target
双指针法:用for循环中的 r 来界定右边界的下标,右边界每移动一位,左边界可能需要移动多位,所以内部再用while, 当满足 数组和>=target时,记录最小数组长度,再移动左边界,继续往后面找。
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int curNum = 0; //当前维护的窗口值的和
int l = 0; //窗口左边界下标
int ans = Integer.MAX_VALUE;//窗口长度
//r是滑动窗口右边界
for(int r=0; r<nums.length; r++){
curNum += nums[r];
//右边移动一位,左边可以移动多位,所以用while
while(curNum >= target) {
ans = Math.min(ans, r-l+1);
curNum -= nums[l++];
}
}
return ans==Integer.MAX_VALUE?0:ans;
}
}