力扣题目链接(opens new window)

给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。

示例:

  • 输入:s = 7, nums = [2,3,1,2,4,3]
  • 输出:2
  • 解释:子数组 [4,3] 是该条件下的长度最小的子数组。

提示:

  • 1 target 10
  • 1 nums.length 10
  • 1 nums[i] 10

题解

/**
 * @param {number} target
 * @param {number[]} nums
 * @return {number}
 */
var minSubArrayLen = function(target, nums) {
    //滑动窗口(双指针)i为起始位置,j为终止位置
    let length=nums.length;
    let i=0;
    let sum=0;
    let result=Infinity;
    for(let j=0;j<length;j++){   
        sum+=nums[j];     
        while(sum>=target){
            let sublength=j-i+1;
            result = Math.min(result, sublength);
            sum-=nums[i++];
        }
        
    }
    return result===Infinity?0:result;
};

reference