滑动窗口 Java 209. 长度最小的子数组

解题思路

此处撰写解题思路
最容易想到的就是两层for循环的暴力
但是这里我们还可以想到一种更简单的方法就是滑动窗口
1、设置两个指针,左右指针都从0开始,右指针移动不断计算左右指针之间的值之和
2、这里要设置一个while循环 判断值之和大于target就进行一个现字串长度和原长度之间的比较
3、比较完之后sum减去左指针的值然后左指针右移 这个时候还在while循环里面
4、因为右指针的值可能比较大即使左指针移动一位任然不够,重复2、的判断,直到跳出循环,右指针再次移动

代码

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int length = nums.length;
        int result = Integer.MAX_VALUE;
        int left = 0;
        int right = 0;
        int sum = 0;

        for(;right<length;right++){
            sum += nums[right];
            while(sum>=target){
                int subLength = right-left+1;
                result = result>subLength?subLength:result;
                sum -=nums[left++];
            }
        }
        return result==Integer.MAX_VALUE?0:result;
    }
}

你可能感兴趣的:(力扣刷题路线,算法,数据结构)