panghu week04 笔记

长度最小的子数组

一开始想的是框定一个区间,然后如果大于等于 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/

posted @ 2024-01-28 16:47  Paualf  阅读(3)  评论(0编辑  收藏  举报