给定一个含有 n 个正整数的数组和一个正整数 target 。

    找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

    示例 1:

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

    输入:target = 4, nums = [1,4,4]
    输出:1
    示例 3:

    输入:target = 11, nums = [1,1,1,1,1,1,1,1]
    输出:0

    1. /**
    2. * @param {number} target
    3. * @param {number[]} nums
    4. * @return {number}
    5. */
    6. var minSubArrayLen = function (target, nums) {
    7. // 快慢指针,滑动窗口
    8. let l = 0, r = 0;
    9. let sum = 0, res = Number.MAX_VALUE;
    10. while (r < nums.length) {
    11. sum += nums[r++];
    12. while (sum >= target && l < r) {
    13. // 达到target,缩小窗口大小
    14. res = Math.min(res, r - l);
    15. sum -= nums[l++];
    16. }
    17. }
    18. return res === Number.MAX_VALUE ? 0 : res
    19. };

    image.png