当前位置: 首页 > news >正文

【算法题】:和为N的连续正数序列

  • 输入一个正数,输出所有和为N的连续正数序列
  • 例如:输入15
  • 结果:[[1,2,3,4,5],[4,5,6],[7,8]]

方法一:双指针法

思路简述:

  • 用两个指针 start 和 end,初始都指向1
  • 计算区间[start, end]的和 sum
  • 如果 sum == N,记录序列,start++缩小区间
  • 如果 sum < N,end++扩大区间
  • 如果 sum > N,start++缩小区间
  • 直到 start 超过 N/2(因为连续正数最少两个,最大起点不会超过 N/2)

示例代码

function findContinuousSequence(N) {let result = [];let start = 1, end = 1;let sum = 0;while (start <= Math.floor(N / 2)) {if (sum < N) {sum += end;end++;} else if (sum > N) {sum -= start;start++;} else {// sum === Nlet seq = [];for (let i = start; i < end; i++) {seq.push(i);}result.push(seq);// 移动start继续找sum -= start;start++;}}return result;
}// 测试
console.log(findContinuousSequence(15)); 
// 输出:[[1,2,3,4,5],[4,5,6],[7,8]]

方法二:

思路:

  • 从N开始计算连续M个的正数序列和:total = N+(N+1)+…+(N+M-1) = (N+(N+M-1))*M/2
function createArr(n, len) {let arr = new Array(len).fill(null);let temp = [];arr[0] = n;arr = arr.map((item, index) => {if (item === null) {item = temp[index - 1] + 1;}temp.push(item);return item;});return arr;
}function fn(count) {let result = [];// => 求出中间值let middle = Math.ceil(count / 2);// 1 从1开始累加for (let i = 1; i <= middle; i++) {// 控制累加多少次for (let j = 2;; j++) {// 求出累加多次的和let total = (i + (i + j - 1)) * (j / 2);if (total > count) {break;} else if (total === count) {result.push(createArr(i, j));break;}}}return result;
}// 测试
console.log(fn(15)); 
// 结果:[[1,2,3,4,5],[4,5,6],[7,8]]
http://www.lryc.cn/news/616242.html

相关文章:

  • 数学建模:控制预测类问题
  • Python 获取对象信息的所有方法
  • matlab实现随机森林算法
  • Doubletrouble靶机练习
  • 点击速度测试:一款放大操作差距的互动挑战游戏
  • #Datawhale AI夏令营#第三期全球AI攻防挑战赛(AIGC技术-图像方向)
  • 如何用分析方法解决工作中的问题?
  • 检索召回率优化探究五(BGE-M3 混合检索):基于LangChain0.3 集成Milvu2.5 向量数据库构建的智能问答系统
  • Linux系统编程Day11 -- 进程属性和常见进程
  • 学习模板元编程(3)enable_if
  • 【树状数组】Dynamic Range Sum Queries
  • [激光原理与应用-221]:设计 - 皮秒紫外激光器 - 常见技术难题、原因与解决方案
  • Linux-静态配置ip地址
  • 【无标题】命名管道(Named Pipe)是一种在操作系统中用于**进程间通信(IPC)** 的机制
  • 深度解析Linux设备树(DTS):设计原理、实现框架与实例分析
  • 基于Qt/QML 5.14和YOLOv8的工业异常检测Demo:冲压点智能识别
  • 线程池的核心线程数与最大线程数怎么设置
  • 基于FFmpeg的B站视频下载处理
  • 简要介绍交叉编译工具arm-none-eabi、arm-linux-gnueabi与arm-linux-gnueabihf
  • 【iOS】JSONModel源码学习
  • 2025.8.10总结
  • mpv core_thread pipeline
  • 第16届蓝桥杯Scratch选拔赛初级及中级(STEMA)2025年4月13日真题
  • ARM保留的标准中断处理程序入口和外设中断处理程序入口介绍
  • Python设计模式 - 装饰模式
  • 双亲委派机制是什么?
  • 亚麻云之轻云直上EC2
  • 硬件开发_基于STM32单片机的智能电梯系统
  • 关键基础设施中的新兴技术如何扩大网络风险
  • Java .class文件反编译成 .java文件