滑动窗口 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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值