菜鸟系列 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:
求和可以换成高斯求和公式。
相关推荐
EdwardSiCong 2020-11-23
yungpheng 2020-10-19
jipengx 2020-11-12
橄榄 2020-11-03
lyqdanang 2020-11-02
wservices 2020-10-30
onepiecedn 2020-10-29
数据人 2020-10-26
dfphoto 2020-10-16
hackerlpy 2020-09-07
tianyayi 2020-08-16
Dullonjiang 2020-08-15
fengling 2020-08-15
wordmhg 2020-08-06
guotiaotiao 2020-08-06
zhangsyi 2020-07-28
千锋 2020-07-27
ahnjwj 2020-07-28