菜鸟系列 Golang 实战 Leetcode —— 面试题57 - II. 和为s的连续正数序列

Posted jiliguo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了菜鸟系列 Golang 实战 Leetcode —— 面试题57 - II. 和为s的连续正数序列相关的知识,希望对你有一定的参考价值。

输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。

序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。

?

示例 1:

输入:target = 9
输出:[[2,3,4],[4,5]]
示例 2:

输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
?

限制:

1 <= target <= 10^5

题解1:

采用滑动窗口,设置左右两个指针,如果sum为target,则保存双指针内的值,如果sum>target,则左指针往右移动,如果sum< target,则右指针right往右移动。

func findContinuousSequence(target int) [][]int {
    var res [][]int
    var boundary=target/2+2
    var left, right int
    var sum int
    var nums = make([]int,boundary)
    for i:=0;i<boundary;i++{
        nums[i]=i+1
    }
    for left<boundary&&right<boundary&&left<=right{
        if sum == target{
            res=append(res,nums[left:right])
            sum -=nums[left]
            left++
        }else if sum < target{
            sum += nums[right]
            right++
        }else{
            sum -=nums[left]
            left++
        }
    }
    return res
}

这里 边界+2,是为了获取right==边界时的值。

题解2:
求和可以换成高斯求和公式。

以上是关于菜鸟系列 Golang 实战 Leetcode —— 面试题57 - II. 和为s的连续正数序列的主要内容,如果未能解决你的问题,请参考以下文章

菜鸟系列 Golang 实战 Leetcode —— 面试题57 - II. 和为s的连续正数序列

菜鸟系列 Golang 实战 Leetcode —— 面试题32 - I. 从上到下打印二叉树

菜鸟系列 Golang 实战 Leetcode —— 买卖股票的最佳时机系列(121. 买卖股票的最佳时机买卖股票的最佳时机 II

菜鸟系列Golang学习 — 协程

golang刷Leetcode系列 --- 实现strStr()

golang刷Leetcode系列 --- 加1