长度最小的子数组(滑动窗口应用)

原题链接:209.长度最小的子数组

根据题意可知,是求最小子数组,那么就可以思考是否可以应用到滑动窗口这个技巧
在滑动窗口内的值大于或等于target时,就可以进行判断了,此时从左侧开始缩小滑动窗口,直到小于target,就可以得出最小的滑动窗口(子数组)的长度了

func minSubArrayLen(target int, nums []int) int {
    left,right,sum:=0,0,0
    min_length := len(nums) +1//最小滑动窗口
    for right < len(nums){//遍历数组
        sum+=nums[right]
        for sum >= target{//滑动窗口值相等,则代表要进行判断是否为最小子数组,不断的减去左侧窗口的值,直到sum不大于target为止
            if right-left +1 < min_length{//滑动窗口长度小于当前最小子数组
                min_length = right-left +1//更新
            }
            //如果滑动窗口大小依旧大于等于最小子数组
            sum -= nums[left]//左侧继续缩小滑动窗口的值
            left++//左侧继续缩小滑动窗口的值
        }
        right++//右侧开始扩大滑动窗口的值
    }
    if min_length == len(nums) +1{//没有满足的子数组
        return 0
    }else{//返回满足的子数组
       return min_length
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值