和为S的连续正数序列
和为S的连续正数序列
http://www.nowcoder.com/questionTerminal/c451a3fd84b64cb19485dad758a55ebe
思路
从1开始累加,相等则加入结果数组中。去除前两个(因为是升序,去除第2个最小的比较合理),重新开始下一轮。
代码
function FindContinuousSequence(sum)
{
// write code here
var resArr = [];
var cur = []; // 存储当前序列
var total = 0; // 计算当前总和
for(var i=1;i<sum;i++){
total += i;
cur.push(i);
// 总和大于sum,则去除头部
while(total > sum){
total -= cur.shift();
}
if(total == sum){
resArr.push(cur);
// 找到一个序列后,去除前两个,开始下一轮
total -= cur[0];
total -= cur[1];
cur = cur.slice(2);
}
}
return resArr;
}