题目描述:给定一个含有 n
****个正整数的数组和一个正整数 target
。
找出该数组中满足其和 ****≥ target
****的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度 。 如果不存在符合条件的子数组,返回 0
。
对应力扣209题
最开始看到题我们大概会用双重for循环去遍历枚举出所有的情况然后返回最小值,按力扣的尿性来说可能就会返回超时了,一般这种类似题目我们用滑动窗口可以解决,类似于双指针,第一重for循环我们取i,即为滑动窗口的末尾,当这个值大于我们的target,我们在收缩滑动窗口的左端然后取值,代码如下:
/**
* @param {number} target
* @param {number[]} nums
* @return {number}
*/
var minSubArrayLen = function(target, nums) {
let start = 0, end = 0;
let sum = 0;
let len = nums.length;
let res = Infinity;
while(end < len) {
sum += nums[end];
while(sum >= target) {
sum -= nums[start];
res = Math.min(res, end - start + 1);
start++;
}
end++
}
return res === Infinity ? 0 : res
};