欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Leetcode 209: 长度最小的子数组

程序员文章站 2022-07-14 18:16:22
...

题目描述:

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

示例: 

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-size-subarray-sum
 

思路:双指针法

var minSubArrayLen = function(s, nums) {
    let p1 = 0, p2 = -1;
    let len = nums.length;
    let res = len + 1;
    let sum = 0;
    while(p1 < len - 1) {
        if(p2 < len - 1 && sum < s) { // 右指针向右滑动
            p2++;
            sum += nums[p2];
        } else {
            sum = sum - nums[p1];
            p1++;
        }
        if(sum >= s) {
            res = res > p2-p1+1 ? p2-p1+1 : res;
        }
    }
    return res === len + 1 ? 0 : res;
};