【剑指Offer 57 Ⅱ】js 和为S的人连续正整数序列
发布日期:2021-05-18 10:46:57 浏览次数:22 分类:精选文章

本文共 1093 字,大约阅读时间需要 3 分钟。

和为S的人连续正整数序列

题目

输入一个正数S,打印出所有和为S的连续正数序列。

例如:输入15,有序1+2+3+4+5 = 4+5+6 = 7+8 = 15 所以打印出3个连续序列1-55-67-8

思路

  • 创建一个容器child,用于表示当前的子序列,初始元素为1,2
  • 记录子序列的开头元素small和末尾元素big
  • big向右移动子序列末尾增加一个数 small向右移动子序列开头减少一个数
  • 当子序列的和大于目标值,small向右移动,子序列的和小于目标值,big向右移动

代码

function FindContinuousSequence(sum) {       const result = [];    const child = [1, 2];    let big = 2;    let small = 1;    let currentSum = 3;    while (big < sum) {           //序列和小于目标值 且big小于目标值执行,直至超过目标值        //存入数组,sum变化,big右移        while (currentSum < sum && big < sum) {               child.push(++big);            currentSum += big;        }        //序列和大于目标值,且指针没越位,直至越位        while (currentSum > sum && small < big) {               //移除child的第一个元素            child.shift();            //左指针自增 sum变化。            currentSum -= small++;        }        //如果值符合,且序列个数>1,存入结果数组,继续寻找。        if (currentSum === sum && child.length > 1) {               result.push(child.slice());            child.push(++big);            currentSum += big;        }    }    return result;}

更多资料

整理不易,若对您有帮助,请给个「关注+点赞」,您的支持是我更新的动力 👇

📖数据结构专栏:

🐱Github笔记 :

上一篇:【剑指Offer 66】js 构建乘积数组
下一篇:【剑指Offer 57】js和为S的两个数字

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月30日 23时17分23秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章