https://leetcode.cn/problems/minimum-size-subarray-sum/

我是菜比,只能想到个这😅

暴力解法

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int min = Integer.MAX_VALUE;
        for(int i = 0;i < nums.length;i++) {
            int sum = nums[i];
            if(sum >= target) return 1;
            for(int j = i+1;j<nums.length;j++){
                sum+=nums[j];
                if(sum >= target) {
                    min = Math.min(min,j-i+1);
                    break;
                }
            }
        }
        return min == Integer.MAX_VALUE ? 0 : min;
    }
}

双指针解法

https://leetcode.cn/problems/minimum-size-subarray-sum/solution/chang-du-zui-xiao-de-zi-shu-zu-by-leetcode-solutio/
可以看官方的双指针题解

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        //left 为指向起始位置的指针
        int left = 0 ;
        int sum = 0;   //记录滑动窗口中的元素的总值
        int result = Integer.MAX_VALUE;  //定义一个较大数值--方便后续比较--类.方法 常量大写
        
        //right 为指向终止位置的指针
        for(int right = 0 ; right < nums.length ; right ++){
           sum += nums[right];
           while(sum >= target){
            int subl = right - left + 1 ;  //获取子串长度--变量定义后才可使用
            result = Math.min(result , subl);  
            sum = sum - nums[left];
            //sum -= sum[right]
            left ++ ;
           }
        }
           return result == Integer.MAX_VALUE ? 0 :result ; //双等于号判断 单等于号为 赋值
    }
}