思路:题目是 数组和 >= 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];//右边移动一位,左边可以移动多位,所以用whilewhile(curNum >= target) {ans = Math.min(ans, r-l+1);curNum -= nums[l++];}}return ans==Integer.MAX_VALUE?0:ans;}
}