难度:简单

    题目描述:
    输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。

    序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。

    示例:

    1. 输入:target = 9
    2. 输出:[[2,3,4],[4,5]]

    解题思路:
    先把数分解9=1+8=2+7=3+6=4+5,按这种,找到可能组成正确结果的数组,根据数的结构,易知结果可能存在[1,2,3,4,5]中,不难发现数组最后一个数,如果target是偶数就是target/2,如果是奇数就是target/2取整加一,即Math.floor(target/2)+1 或采用二进制取整(target/2 | 0) + 1,再对找到的数组采用滑动窗口模型,找出答案。

    1. var findContinuousSequence = function (target) {
    2. let index = target % 2 === 0 ? target / 2 : (target / 2 | 0) + 1
    3. let res = []
    4. let temp = []
    5. let sum = 0
    6. for (let i = 1; i <= index; i++) {
    7. temp.push(i)
    8. sum = sum + i
    9. while (sum > target) {
    10. sum -= temp[0]
    11. temp.shift()
    12. }
    13. if (sum === target) {
    14. temp.length >= 2 && res.push([...temp])
    15. }
    16. }
    17. return res;
    18. };