美文网首页程序员
力扣 209 长度最小的子数组

力扣 209 长度最小的子数组

作者: zhaojinhui | 来源:发表于2020-10-29 10:34 被阅读0次

题意:给定一个数组,和一个值,返回和<=该值的最短subarray

思路:

  1. 遍历数组,后移end,用sum记录当前滑动窗口的start到end的和
  2. 如果加上当前数后sum>=s,那么向前移动start,缩小窗口并更新res
  3. 如果最后没找到res,返回0,否则返回res

思想:滑动窗口

复杂度:时间O(n),空间O(1)

class Solution {
    public int minSubArrayLen(int s, int[] nums) {
        int len = nums.length;
        int start = 0;
        int end = 0;
        int res = len+1;
        int sum = 0;
        while(end < len) {
            sum += nums[end++];
            while(start < end && sum >= s) {
                res = Math.min(res, end - start);
                sum -= nums[start++];
            }
        }
        if(res == len+1)
            return 0;
        return res;
    }
}

相关文章

网友评论

    本文标题:力扣 209 长度最小的子数组

    本文链接:https://www.haomeiwen.com/subject/fbrqvktx.html