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

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

思路

滑动窗口 时间复杂度 Olog(n)
image.png

题解

  1. function minSubArrayLen(s: number, nums: number[]): number {
  2. let i = 0,
  3. subLen = 0,
  4. sum = 0,
  5. len = nums.length,
  6. res = Number.MAX_SAFE_INTEGER;
  7. for (let j = 0; j < len; j++) {
  8. sum += nums[j];
  9. while (sum >= s) {
  10. subLen = j - i + 1;
  11. res = res < subLen ? res : subLen;
  12. sum -= nums[i];
  13. i++;
  14. }
  15. }
  16. return res === Number.MAX_SAFE_INTEGER ? 0 : res;
  17. };