码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-03-06 21:45:18      阅读:51      评论:0      收藏:0      [点我收藏+]

标签:sse   return   app   UNC   序列   code   两个指针   i+1   pen   

输入一个正整数 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的连续正数序列

标签:sse   return   app   UNC   序列   code   两个指针   i+1   pen   

原文地址:https://www.cnblogs.com/jiliguo/p/12430926.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!