Goland滑动窗口

原题链接:最小滑动窗口

维护一个最小的滑动窗口,需要判断这个窗口的sum值是否大于给定的target,如果不大于则一直往数组右方元素累加至大于或等于target值即可
大于或等于时,则需要得到当前滑动窗口的长度,判断是不是长度最小的滑动窗口,如果是则将该窗口长度赋值给result变量用于返回
如果不是则需要减掉滑动窗口最左侧的元素,代表滑动窗口最左则的元素为i,则i++代表了滑动窗口最左则元素减少。
减小掉了窗口最左则的元素,那么滑动窗口总值sum也要减去元素的值,所以也就是sum -=nums[i]
此时反复判断sum是否还大于target,如果大于或等于则继续重复。如果是小于,则回到外层for循环sum+=nums[j]将滑动窗口往右侧扩容一个元素
直到滑动窗口最右侧元素nums[j]碰到末尾
此时判断result是否是原数组大小,如果是则返回0
如果不是则返回result

代码块:

func minSubArrayLen(target int, nums []int) int {
    i := 0
    l := len(nums)
    sum :=0
    result := l+1 //在没有最小子数组的情况下滑动窗口等于nums数组的长度大小
    for j:=0; j<l;j++{
        sum+=nums[j] //起始综合数  用于判断是否大于target
        for sum >= target{
            subLength := j-i +1 //最小滑动窗口长度
            if subLength < result{//如果最小滑动窗口长度小于默认nums数组长度大小
                result = subLength//此时讲result替换为subLength,更新最小滑动窗口长度
            }
            sum -= nums[i]//为了不断探索最小滑动窗口,所以需要减去滑动窗口最右边也就是最大的数组元素
            i++
        }
    }
    if result == l + 1{//滑动窗口之为数组大小,则代表没有最小子数组
        return 0
    }else{
        return result
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值