当前位置: 首页 > 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.dtcms.com/a/325028.html

相关文章:

  • AI大模型-提示词工程
  • 01 词法分析陷阱:C编程中的符号误解
  • 深度解析 Spring Boot 循环依赖:原理、源码与解决方案
  • PhotoDirector 安卓版:功能强大的照片编辑与美化应用
  • TypeScript中的type和interface的区别是什么?
  • Shell脚本-数组定义
  • OpenEnler等Linux系统中安装git工具的方法
  • DDR中的POD与ODT
  • 分布式事务原理(高并发系统下的数据一致性保障)
  • 一、线性规划
  • 免费数字人API开发方案
  • 高精度计算+快速幂算法
  • 【算法题】:斐波那契数列
  • 【langchain】如何给langchain提issue和提pull request?
  • SpringIoc 实践和应用--XML配置
  • 数据结构-deque(双端队列)和queue(队列)区别
  • Flask多进程数据库访问问题详解
  • spring全家桶使用教程
  • Lua语言元表、协同程序
  • 密码学的数学基础2-Paillier为什么产生密钥对比RSA慢
  • SQL三剑客:DELETE、TRUNCATE、DROP全解析
  • 深度相机---双目深度相机
  • 浏览器CEFSharp+X86+win7 之 浏览器右键菜单(六)
  • Mysql笔记-存储过程与存储函数
  • vulnhub-doubletrouble靶场攻略
  • Linux C文件操作函数
  • 谷歌DeepMind发布Genie 3:通用型世界模型,可生成前所未有多样化的交互式虚拟环境
  • C++移动语义、完美转发及编译器优化零拷贝
  • PostgreSQL 批量COPY导入优化参数配置
  • 近红外与可见光图像融合的多种方法实现