菜鸟系列 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