news 2026/4/15 18:16:49

力扣刷题:文件组合

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣刷题:文件组合

题目:
待传输文件被切分成多个部分,按照原排列顺序,每部分文件编号均为一个 正整数(至少含有两个文件)。传输要求为:连续文件编号总和为接收方指定数字 target 的所有文件。请返回所有符合该要求的文件传输组合列表。

注意,返回时需遵循以下规则:

每种组合按照文件编号 升序 排列;
不同组合按照第一个文件编号 升序 排列。

示例 1:

输入:target = 12
输出:[[3, 4, 5]]
解释:在上述示例中,存在一个连续正整数序列的和为 12,为 [3, 4, 5]。

示例 2:

输入:target = 18
输出:[[3,4,5,6],[5,6,7]]
解释:在上述示例中,存在两个连续正整数序列的和分别为 18,分别为 [3, 4, 5, 6] 和 [5, 6, 7]。

解析:
这道题本质是寻找所有连续的正整数序列,这些序列的和等于给定的 target,序列长度至少为2
我们就可以设置一个滑动窗口来做,通过调整窗口左右边界,寻找和等于 target 的窗口

具体代码:

/** * 找出所有和为target的连续正整数序列 * @param {number} target - 目标和 * @return {number[][]} - 所有符合条件的连续正整数序列数组 */varfileCombination=function(target){// 初始状态:从数字1开始letsum=1// 当前窗口内数字的和,初始为[1]的和letlist=[1]// 滑动窗口,存储当前连续的整数序列letres=[]// 存储所有符合条件的序列// 遍历可能的连续序列// 从2开始,到Math.ceil(target/2)结束// 原因:最小的两个连续整数n和n+1,如果n > target/2,则n+(n+1)>targetfor(leti=2;i<=Math.ceil(target/2);i++){// 窗口向右扩展:将当前数字i加入窗口sum+=i// 更新窗口和list.push(i)// 将i加入窗口末尾// 如果窗口和超过target,需要从左侧收缩窗口// 不断移除窗口中最小的数字,直到窗口和≤targetwhile(sum>target){sum-=list.shift()// 移除窗口最左侧的数字,并更新和}// 检查当前窗口和是否正好等于targetif(sum===target){// 找到符合条件的序列,深拷贝当前窗口并保存res.push([...list])// 使用扩展运算符创建数组副本}}// 返回所有找到的连续序列returnres}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 7:58:54

RAG实战指南:告别大模型幻觉,提升回答准确率!

生活的本质在于取舍&#xff0c;RAG架构亦是如此。01 初识RAG 不知道大家在提问大模型的时候&#xff0c;有没有碰到过这种情况。 并不是每一个问题&#xff0c;它都能答上来。甚至有时候它会瞎编一些答案&#xff0c;一本正经地胡说八道。 这种情况&#xff0c;通常被称为大模…

作者头像 李华
网站建设 2026/4/15 14:46:27

AI不会淘汰程序员,但会淘汰不懂AI的程序员!收藏学习指南

AI 会淘汰程序员么&#xff1f; 我的答案是 “会”。 AI 会不会淘汰程序员&#xff1f;这是学编程的朋友们非常关注的问题&#xff0c;我也一样&#xff0c;因为如果程序员被淘汰了&#xff0c;那我这个程序员博主也就光荣退休了。 “你讲编程还有个毛用&#xff1f;你做教程还…

作者头像 李华