剑指offer-41、和为S的连续正数序列

news/2025/11/25 9:01:20/文章来源:https://www.cnblogs.com/sevencoding/p/19256937

题⽬描述

⼩明很喜欢数学,有⼀天他在做数学作业时,要求计算出 9~16 的和,他⻢上就写出了正确答案是 100 。但是他并不满⾜于此,他在想究竟有多少种连续的正数序列的和为 100 (⾄少包括两个数)。没多久,他就得到另⼀组连续正数和为 100 的序列: 18,19,20,21,22 。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!

返回值描述:输出所有和为 S 的连续正数序列。序列内按照从⼩⾄⼤的顺序,序列间按照开始数字从⼩到⼤的顺序

示例1:

输⼊:9
返回值:[[2,3,4],[4,5]]

思路及解答

暴力枚举

通过双重循环尝试所有可能的序列起点和终点。

针对每⼀个索引起点,都计算后续的连续⼦数组的和,并且将元素存到临时 list 中。

如果和不超过 sum ,那么就继续往后⾯遍历;

如果和等于 sum ,则说明该连续⼦数组满⾜条件,将临时 list 添加到结果集中

如果和⼤于 sum ,则说明连续⼦数组已经超过,该索引起点的不满⾜条件,直接 break 。

注意的是,起点我们只需要遍历到 sum/2 的位置即可,因为⼤于 sum/2 的索引,任何两个数的和都⼤于 sum ,不符合条件。

import java.util.ArrayList;public class Solution {public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {ArrayList<ArrayList<Integer>> result = new ArrayList<>();if (sum < 3) return result; // 至少需要两个数,最小和为1+2=3// 序列起点最多到sum/2,因为至少两个数,第二个数肯定比sum/2大for (int i = 1; i <= sum / 2; i++) {int currentSum = 0;ArrayList<Integer> sequence = new ArrayList<>();// 从i开始累加,直到和大于等于sumfor (int j = i; j < sum; j++) {currentSum += j;sequence.add(j);if (currentSum == sum) {result.add(new ArrayList<>(sequence)); // 找到有效序列break;} else if (currentSum > sum) {break; // 已经超过,无需继续}}}return result;}
}
  • 时间复杂度:O(n²)
  • 空间复杂度:O(k),k为结果序列数

数学计算

利用等差数列求和公式进行数学优化,减少计算量。

思路:设序列长度为n,起始为x,则满足:n*(2x+n-1)/2 = sum

import java.util.ArrayList;public class Solution {public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {ArrayList<ArrayList<Integer>> result = new ArrayList<>();if (sum < 3) return result;// 序列长度n从2开始尝试(至少两个数)for (int n = 2; n * (n + 1) / 2 <= sum; n++) {// 根据求和公式推导:sum = n*(2x+n-1)/2// 解得:x = (2*sum/n - n + 1)/2int numerator = 2 * sum - n * (n - 1);int denominator = 2 * n;// x必须是正整数,且分子要能整除分母if (numerator > 0 && numerator % denominator == 0) {int x = numerator / denominator;ArrayList<Integer> sequence = new ArrayList<>();for (int i = 0; i < n; i++) {sequence.add(x + i);}result.add(sequence);}}// 由于我们从长度小的开始,需要反转结果保证序列间顺序result.sort((a, b) -> a.get(0) - b.get(0));return result;}
}
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

滑动窗口(最优)

使用双指针技术,动态调整窗口大小

import java.util.ArrayList;public class Solution {public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {ArrayList<ArrayList<Integer>> result = new ArrayList<>();if (sum < 3) return result;int left = 1;    // 窗口左边界int right = 2;   // 窗口右边界int currentSum = left + right; // 当前窗口和// 左边界最多到sum/2,因为至少需要两个数while (left <= sum / 2) {if (currentSum == sum) {// 找到有效序列,添加到结果ArrayList<Integer> sequence = new ArrayList<>();for (int i = left; i <= right; i++) {sequence.add(i);}result.add(sequence);// 左边界右移,继续寻找currentSum -= left;left++;} else if (currentSum < sum) {// 和太小,扩大窗口(右边界右移)right++;currentSum += right;} else {// 和太大,缩小窗口(左边界右移)currentSum -= left;left++;}}return result;}
}
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/975556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年靠谱的辊道通过式抛丸机优质厂家推荐榜单

2025年靠谱的辊道通过式抛丸机优质厂家推荐榜单行业背景与市场趋势辊道通过式抛丸机作为金属表面处理领域的关键设备,近年来随着制造业转型升级和环保要求提升,市场需求持续增长。据中国铸造协会最新统计数据显示,2…

蓝牙基础(八):蓝牙应用、Profile、协议栈

liwen01 2025.11.09 前言 前面我们介绍的蓝牙核心系统架构、信道、跳频选择算法、状态、角色、地址可靠性和数据处理流程这些,都是比较偏底层的一些知识。 底层协议规范的制定、开发、验证是一项复杂的任务,首先是 要…

[论文笔记•(多智能体)]LLMs Can Simulate Standardized Patients via Agent Coevolution - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

山东慧麟机电专业供应:山东静音发电车租赁 大型 / 中高压 / 柴油 / 移动发电车出租 24 小时应急供电保障

在现代社会生产生活中,稳定供电是保障各类场景有序运转的核心基础。山东慧麟机电设备租赁有限公司作为专业的发电机租赁服务提供商,自 2018 年成立以来,专注于山东静音发电车租赁、山东大型发电车出租、山东中高压发…

FD-350 水分含量传感器 耐腐蚀 混凝土 温室 农田等领域可用

FD-350 水分含量传感器 耐腐蚀 混凝土 温室 农田等领域可用产品概述 FD-350 水分含量传感器由电源模块、变送模块、漂零及温度补偿模块、数据处理模块等组成。采用FDR频域法,可以实时准确测定各种土壤不同剖面的水分…

2025 最新发电机租赁厂商推荐排行榜:静音 / 大型 / 柴油 / 应急 / 中高压设备靠谱服务商权威甄选大型,山东应急发电机出租公司推荐

引言 在工业生产、工程建设、应急保障等核心场景中,发电机租赁已成为解决临时用电与备用供电需求的核心方案。随着市场需求扩容,行业服务商数量激增,但设备品质、服务标准差异显著,部分服务商存在设备老旧、响应滞…

HZOI2024名册 - Gon

man参考自HZOI2023名册\[\texttt{upd on }\large{\texttt{2025/11/25}} \]本名册收录截至 \(NOIP2025\) 前未退役的 \(2024\) 届 \(hzoier\) 共 \(18\) 人 当前在役:\(18/18\) 人 信息格式: luogu头像(挂luogu链接)…

2025年正宗驼奶粉直销厂家权威推荐榜单:驼奶/最好的驼奶粉/正宗驼奶源头厂家精选

新疆昌吉州阜康市2024年骆驼产业销售额达4.2亿元,预计2025年将攀升至6.5亿元。在特色乳制品市场蓬勃发展的背景下,正宗驼奶已成为健康食品领域的重要选择。 在健康消费升级的背景下,驼奶凭借其高营养价值与独特活性…

十载深耕一对一直播交友源码开发搭建,布谷鸟科技为您筑牢创业根基

在移动互联网浪潮的推动下,一对一直播交友凭借其强互动性、高私密性的优势,成为社交娱乐赛道的新风口。越来越多创业者将目光投向这一领域,而一对一直播交友源码开发搭建作为项目启动的核心环节,却让不少人在鱼龙混…

day12-Dify批量邮件和微信群通知工作流

1 目标 1.1 介绍 # 1 在企业日常运营中,批量通知是连接团队、传递信息的核心环节——从全员性的制度公告、项目进度同步,到精准化的活动邀约、任务提醒,都离不开邮件与微信群这两大主流渠道。 # 2 然而传统操作中,…

【URP】Unity[相机]自定义相机

Universal Additional Camera Data 组件概述 在 Unity Universal Render Pipeline (URP) 中,UniversalAdditionalC【从UnityURP开始探索游戏渲染】专栏-直达Universal Additional Camera Data 组件概述 在 Unity Univ…

2025年热门的钢板预处理线厂家最新TOP实力排行

2025年热门的钢板预处理线厂家最新TOP实力排行行业背景与市场趋势随着全球制造业的持续升级和"中国制造2025"战略的深入推进,钢板预处理设备作为金属加工行业的关键装备,市场需求呈现稳定增长态势。据中国…

广西一对一辅导机构口碑之选:2025南宁、柳州、桂林备受好评的补习机构

在广西,从首府南宁的学区房家长到工业重镇柳州的工薪家庭,从山水名城桂林的陪读父母到边境口岸防城港的务工家庭,“孩子偏科严重却找不到对症的老师”、“线下机构收费高效果却参差不齐”、“想了解学习进度还要反复…

2025年优质实木定制橱柜本地优选榜

2025年优质实木定制橱柜本地优选榜行业背景与市场趋势近年来,随着消费升级和居住品质要求的提高,中国定制家居市场持续保持稳健增长。根据中国家具协会最新发布的《2024年中国定制家居行业发展报告》显示,2023年中国…

常见配电方式

2025/11/25常见配电方式配电方式 线色标识 核心特性 选用理由三相五线制(TN-S) 相线(黄 / 绿 / 红)、N 线(淡蓝)、PE 线(黄绿双色) N 线与 PE 线分离,接地可靠、抗干扰强 安全优先级最高,适配工业生产、民用…

小明的Spring Security入门到深入实战

小 明 的 摄 影 网 站 已 经 用 Spring Boot 搭 建 完 成 , 访 客 越 来 越 多 。 他 决 定 给 网 站 加 上 完 整 的 登 录 认 证 鉴 权 功 能 , 让 不 同 角 色…

2025年国内全屋定制推荐优选榜

2025年国内全屋定制推荐优选榜行业背景与市场趋势近年来,随着消费升级和居住理念的转变,全屋定制行业在中国市场呈现出蓬勃发展的态势。据中国家居建材装饰协会最新数据显示,2024年中国全屋定制市场规模已突破5000亿…

广西一对一辅导机构权威榜单:2025年梧州、北海、防城港辅导机构综合实力榜

“耗的不是学费,是孩子转瞬即逝的升学关键期。”梧州万秀区的陈妈妈在家长群的这句吐槽,戳中了无数广西家长的痛点。她的孩子初三英语从110分跌至85分,半年内换了3家辅导机构,结果“专属教案”是网上随处可下的模板…

2025年靠谱的电缆厂家推荐及选购指南

2025年靠谱的电缆厂家推荐及选购指南行业背景与市场趋势随着我国基础设施建设的持续推进和新能源产业的快速发展,电线电缆行业迎来了新一轮增长机遇。据中国电器工业协会电线电缆分会最新数据显示,2024年我国电线电缆…

UDP敲门与零信任机制之间的关系 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …