长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其总和大于等于 target 的长度最小的
子数组
[numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

  • 输入:target = 7, nums = [2,3,1,2,4,3]
  • 输出:2
    解释:子数组 [4,3] 是该条件下的长度最小的子数组。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var minSubArrayLen = function(target, nums) {
/**
* 从头开始找出大于等于目标值的子数组,并计算长度,之后再开始从头减去,子数组向右滑动
*/
let start = 0;//子数组的初始索引
let end = 0;//子数组的末尾索引,也需要从0开始遍历,等与目标值时更新一次末尾值
let sum = 0;//用于计算子数组内和
let arrLength = 0;//用于计算子数组的长度
let res = nums.length //返回值
let sign = 0 //用于判断数组是否有大于等于目标值的标志位 0时nums中无和等于目标值,1时有
for(end;end<nums.length;end++){
sum += nums[end];
while(sum >= target){
//更新标志位
sign = 1;
//计算此时的子数组长度
arrLength = end - start + 1;
res = Math.min(arrLength,res);
//子数组向右滑动
sum -= nums[start];
start++;
}
}
return sign == 1? res:0;
};