长度最小的子数组
一开始想的是框定一个区间,然后如果大于等于 target,从区间头弹出一个元素,从尾部append进入一个元素,发现并不能覆盖所有的区间
看了题解以后,可以定尾,然后移动头部进行比较
func minSubArrayLen(target int, nums []int) int {
slide := make([]int,0)
slideSum := 0
slideRes := 0
for i := 0;i < len(nums);i++ {
slide = append(slide, nums[i])
slideSum += nums[i]
fmt.Println(slide)
if slideSum == target {
slideRes = min(slideRes,len(slide))
slideSum -= slide[0]
slide = slide[1:len(slide)]
}else if slideSum > target {
slideSum -= slide[0]
slide = slide[1:len(slide)]
}
}
return slideRes
}
func min(a,b int)int {
if a == 0 {
return b
}
if b < a {
return a
}
return b
}
func minSubArrayLen(target int, nums []int) int {
n := len(nums)
if n == 0 {
return 0
}
ans := math.MaxInt32
start,end := 0,0
sum := 0
for end < n {
sum += nums[end]
for sum >= target {
ans = min(ans,end - start + 1)
sum -= nums[start]
start++
}
end++
}
if ans == math.MaxInt32 {
return 0
}
return ans
}
线上debug工具:
ArthasHotSwap
https://plugins.jetbrains.com/plugin/16437-arthashotswap/