1. /**
    2. * @Description 典型的滑动窗口问题
    3. * nums[left .... right] 为我们的滑动窗口
    4. * 如果当前sum < target 则窗口右面的边界右移,扩大窗口大小,sum = sum + nums[right]
    5. * 如果当前sum >= target 则窗口左边界右移,缩小窗口大小,sum = sum - nums[left],记录数组大小
    6. *
    7. * @Date 2022/1/9 7:31 下午
    8. * @Author wuqichuan@zuoyebang.com
    9. **/
    10. class Solution {
    11. public int minSubArrayLen(int target, int[] nums) {
    12. int left = 0;
    13. //right = -1是为了确保刚初始化的时候,窗口里是没有有效数据了
    14. int right = -1;
    15. int sum = 0;
    16. int minLength = nums.length + 1;
    17. while (left < nums.length){
    18. //先确定好当前的sum值是什么
    19. //如果sum < target 则说明值不够大,右边界需要右移,sum 需要增大
    20. //所以 right 先++ 然后累加sum
    21. if(right+1 < nums.length && sum < target){
    22. right++;
    23. sum = sum + nums[right];
    24. }else {
    25. //如果sum 已经 >= target了,则说明值大了,左边界需要右移
    26. sum = sum - nums[left];
    27. left++;
    28. }
    29. if(sum >= target){
    30. //记录当前数组长度,和当前最小长度取一个最小值出来
    31. minLength = Math.min(minLength, right - left + 1);
    32. }
    33. }
    34. if(minLength == nums.length + 1){
    35. return 0;
    36. }else{
    37. return minLength;
    38. }
    39. }
    40. }