题解 | #和为S的连续正数序列#
和为S的连续正数序列
https://www.nowcoder.com/practice/c451a3fd84b64cb19485dad758a55ebe
function FindContinuousSequence(sum) { // 使用左右指针维持一个滑动窗口 // 区间和为((r - l + 1)2)*(l + r)(等差数列求和公式) // 左指针从1开始,右指针从2开始如果区间和正好等于目标数说明以左指针开始的序列找到了,记录下该序列,左指针右移(因为从左指针开始的区间不会再存在相等的序列了) // 如果区间和大于目标数则左指针右移 // 如果区间和小于目标数则右指针右移 let left = 1; let right = 2; let sum1 = 0; let res = []; while (left < right) { // 求当前区间和 sum1 = (left + right) * ((right - left + 1) / 2); // 如果当前区间和等于sum,则将结果加入到结果数组中,并将左指针右移 if (sum1 === sum) { let temp = []; for (let i = left; i <= right; i++) { temp.push(i); } res.push(temp); left++; } // 如果当前和小于sum,则将右指针右移 else if (sum1 < sum) { right++; } // 如果当前和大于sum,则将左指针右移 else { left++; } } return res; } module.exports = { FindContinuousSequence: FindContinuousSequence, };