剑指offer 和大于等于target的最短子数组

力扣题目
解题思路:
双指针(有点滑动窗口的思想)
1.初始话最短数组的长度 min = Integer.MAX_VALUE
2.初始化一个数组的和 sum = 0;
3.定义变量(窗口的前后指针)i=0 j=0 j为快指针
4.开始遍历,当sum的值大于等于target时更新min
5.缩小窗口范围,加入后边的数组元素。


class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        //设置最小初始值
        int min = Integer.MAX_VALUE;
        //初始化数组和
        int sum = 0;
        //定义两个变量i,j
        for(int i=0,j=0;j<nums.length;j++){
            //扩大窗口
            sum += nums[j];
            while(i<=j && sum>=target){
                //更新最小值
                min = Math.min(min,j-i+1);
                //缩小窗口
                sum-= nums[i++];
            }
        }
        //若所有数组和都小于target,则返回0,否则返回更新值
        return min == Integer.MAX_VALUE?0:min;
    }
}

posted @ 2022-02-04 18:03  蹇爱黄  阅读(46)  评论(0)    收藏  举报