# 题目描述
给定一个含有 n 个正整数的数组和一个正整数 target
找出该数组中满足其和 ≥ target
的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
# 测试用例
示例 1:
- 输入:
target = 7, nums = [2,3,1,2,4,3]
- 输出:2
- 解释:子数组 [4,3] 是该条件下的长度最小的子数组。
# 代码实现
/**
* @param {number} target
* @param {number[]} nums
* @return {number}
*/
var minSubArrayLen = function (target, nums) {
let len = Number.MAX_SAFE_INTEGER;
let sum = 0;
// let window = [];
// 滑动窗口起始位置
let j = 0;
// 2 3 1
for (let i = 0; i < nums.length; i++) {
sum += nums[i];
while (sum >= target) {
len = Math.min(i - j + 1, len);
sum -= nums[j];
j++;
}
}
return len === Number.MAX_SAFE_INTEGER ? 0 : len;
};
var __readline = require("readline-sync");
__readline.setDefaultOptions({ prompt: "" });
var readline = __readline.prompt;
console.log("请输入nums: ");
let nums = readline()
.split(",")
.map((item) => parseInt(item));
console.log("请输入target: ");
let target = parseInt(readline());
const res = minSubArrayLen(target, nums);
console.log("结果为: ", res);
/*
请输入nums:
2,3,1,2,4,3
请输入target:
7
结果为: 2
*/
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48