和为s的连续正数序列——双指针算法

118 阅读1分钟

1,和为s的连续正数序列

image.png

解题思路

实例二

创建两个指针

image.png (条件一:区间和小于15) 指针1不动,移动指针2,直到区间和大于或等于15,若等于则将区间构造为一个临时的一维数组,然后将一维数组append到二维数组中。
若大于,则指针2不动,移动指针1

image.png 直到再次满足条件1,则再次移动指针2
循环往复直到指针2指向的数 <= (15/2)+1,输出二维数组

func findContinuousSequence(target int) (ans [][]int) {
    l,r := 1,1
    sum := 0
    for r <= target/2+1{
        sum += r
        for sum > target{
            sum -= l
            l++
        }
        if sum == target{
            var ans1 []int
            for a:=l;a<=r;a++{
                ans1 = append(ans1,a)
            }
            ans = append(ans,ans1)
        }
        r++
    }
    return
}