力扣209题(长度最小的子数组)

209、长度最小的子数组

基本思想:

滑动窗口

具体实现:

1.窗口内是什么?

窗口内是窗口起始位置和窗口结束位置框住的一段数组。

2.窗口的起始位置如何移动?

如果当前窗口的值>=s,窗口要缩小,就是起始位置向后移。

3.窗口的结束位置如何移动?

如果当前窗口的值<s,窗口要扩大,就是结束位置向后移。

代码:

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int left = 0;//滑动窗口起始位置指针
        int sum = 0;//窗口内元素之和
        int result = Integer.MAX_VALUE;
        for (int right = 0; right < nums.length; right++){//如果当前窗口的值<s,窗口要扩大,就是结束位置向后移。
            sum += nums[right];
            while (sum >= target){
                result = Math.min(result,right - left + 1);//找长度最小的
                sum -= nums[left++];//如果当前窗口的值>=s,窗口要缩小,就是起始位置向后移。
            }
        }//如果当前窗口的值<s,窗口要扩大,就是结束位置向后移。
        return result == Integer.MAX_VALUE ? 0 : result;
    }
}
原文地址:https://www.cnblogs.com/zhaojiayu/p/15389608.html