和为S的连续正数序列
和为S的连续正数序列
http://www.nowcoder.com/questionTerminal/c451a3fd84b64cb19485dad758a55ebe
既然是数学问题,那么就用数学的方法来解决(笑)
无非就是一个等差数列求和的问题
等差数列求和公式:
其中:
代入可得: 并且
满足正数的条件,所以
可得:
算法复杂度:
接下来就可以愉快地写代码啦:
function FindContinuousSequence(sum) { const res = []; if(sum <= 0) return res; let n=2, x0, each; while(n**2 + n <= 2*sum){ x0 = (2*sum + n - n**2) / (2*n); if(Math.floor(x0) === x0){ each = []; for(let i=0; i<n; ++i) each.push(x0+i); res.push(each); } ++n; } return res.sort((a, b) => a[0]-b[0]); }