(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,通过