和为S的连续正数序列
Less than 1 minute
和为S的连续正数序列
题目链接
题目描述
刷题思路
代码实现
// 注意是连续递增数列,间距为1 那么可以将序列开始、结束元素看做 a 、 b
// 按照数列求和公式sum=(首项+尾项)* 项数 /2 即可
export function FindContinuousSequence(sum) {
// 按照sum值,先预估大概最多满足条件的序列
// sum=(b+a)(b-a+1)/2
let left = 1
let right = 2
const result = []
while (left < right) {
// 从left....right的序列求和
const tempSum = (right + left) * (right - left + 1)
if (2 * sum === tempSum) {
// 满足条件
let count = left
const tempArr = []
while (count <= right) {
tempArr.push(count)
count++
}
result.push(tempArr)
// 向前寻找
left++
}
else if (2 * sum > tempSum) {
// 右边向右
right++
}
else {
// 左边向右
left++
}
}
return result
}