力扣练习题-209.长度最小的子数组

209.长度最小的子数组
1、双重for循环
2、双指针法

子数组就是双指针中间包含的那个子数组

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        // right是右指针,left是左指针
        int right = 0, left = 0;
        // sum是连续子数组的和,result是子数组的长度
        int sum = nums[left], result = Integer.MAX_VALUE;
        // 遍历right
        while(right < nums.length){
            // 如果满足条件
            if(sum >= target){
                // 判断该子数组是不是比之前的子数组长度小
                int temp = right - left + 1;
                // 如果比较小,那么就保存
                if(result > temp){
                    result = temp;
                }
                // 将最左边的这个值删除,继续查找符合条件的子数组,看是否存在更优的子数组
                sum -= nums[left];
                // left的位置加一
                left++;
                continue;
            }
            // 如果不满足条件,那么右指针向右偏转,直到找到符合条件的
            right++;
            // 这个是因为最后一个值,可能会造成数组溢出,所以需要判断一下
            if (right == nums.length) {
                break;
            }
            sum += nums[right];
        }
        // 如果result一直是初始值,则表示没有满足条件的子数组
        return result == Integer.MAX_VALUE ? 0 : result;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值