题解 | #和为S的连续正数序列#

和为S的连续正数序列

https://www.nowcoder.com/practice/c451a3fd84b64cb19485dad758a55ebe

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param sum int整型
 * @return int整型二维数组
 */
func FindContinuousSequence(sum int) [][]int {
	// write code here
    // 滑动窗口, 当前和小于目标和,扩大右边界,当前和大于目标和,左边界右移
  	// 找到相等和,记录数组
    // 此状态下,左边继续右移,同时当前和减去移出的左边界
    // 终止状态:右边界达到目标和
    if sum <= 0 {
        return [][]int{{0}}
    }
	res := make([][]int, 0)
	left, right := 1, 2
	curSum := left + right
	for right < sum {
		if curSum < sum {
			right += 1
			curSum += right
		} else if curSum > sum {
			curSum -= left
			left += 1
		} else {
            tmp := make([]int, right-left+1)
            for i:= range tmp {
                tmp[i] = i + left
            }
			res = append(res, tmp)
            curSum -= left
            left += 1
		}
	}
    return res
}

全部评论

相关推荐

无情咸鱼王的秋招日记之薛定谔的Offer:好拒信,偷了,希望有机会用到
点赞 评论 收藏
分享
一个非常好用的遍历方法
AomaYple:不是指针,是引用
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务