Go算法

(10)Go双索引滑动窗口求长度最小连续子数组

2019-05-14  本文已影响0人  哥斯拉啊啊啊哦
方法1:暴力解法,遍历所有连续字数组,验证其sum>=s,并求出长度最小的。
时间复杂度O(n^3)

方法2:双索引滑动窗口法
// 时间复杂度O(n)
// 空间复杂度O(1)
func minSubArrayLen2(s int, nums []int) int {
    l, r := 0, 0 //[l...r]滑动窗口
    sum := 0
    length := len(nums)
    res := length + 1

    for l <= r && r < length {
        sum += nums[r]
        for sum >= s {
            // 每次sum>=s,求1次[l...r]窗口的最小长度
            res = min(res, r-l+1)
            sum -= nums[l]
            l++
        }
        r++
    }
    // res没变化说明找不到
    if res == length+1 {
        return 0
    }
    return res
}

func min(i1, i2 int) int {
    if i1 <= i2 {
        return i1
    }
    return i2
}

提交leetcode,通过

上一篇下一篇

猜你喜欢

热点阅读