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

Leetcode 209:长度最小的子数组

程序员文章站 2022-07-14 18:15:40
...

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

示例:

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

进阶:

如果你已经完成了O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。

解题思路:利用左右两个指针往后加(java代码如下)

public int minSubArrayLen2(int s, int[] nums) {
    int l = 0;
    int r = 0;
    int cur = 0;
    int res = Integer.MAX_VALUE;
    while (r < nums.length) {
        if (cur < s) {
            cur += nums[r++];
        } else {
            if (r - l < res) {
                res = r - l;
            }
            cur -= nums[l++];
        }
    }
    //r已经加到最后了,这时需要将l尽可能的往右移
    while(cur >= s) {
        cur -= nums[l++];
        if (r - l + 1 < res) {
            res = r - l + 1;
        }
    }
    return res;
}


相关标签: leetcode