题解 | #和为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
}
查看18道真题和解析
