class Solution {
public static void main(String[] args) {
int[] nums = {1,2,3,4,5};
System.out.println(new Solution().minSubArrayLen(11, nums));
}
public int minSubArrayLen(int target, int[] nums) {
int l = 0, r = 0;//滑动窗口的左右指针
int sum = 0;//滑动窗口内数的和
int res = Integer.MAX_VALUE;//结果
while(r < nums.length) {
if(sum >= target) {
res = Math.min(res, r - l);
sum -= nums[l];
l++;
} else if (sum <target) {
sum += nums[r];
r++;
}
}
//退出while后窗口内数的和如果大于target的话可能还有符合的情况需要查找一下
while(sum >= target) {
res = Math.min(res, r - l);
sum -= nums[l];
l++;
}
return res == Integer.MAX_VALUE ? 0 : res;
}
}