• # 题目描述

给定一个含有 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