news 2026/6/12 14:01:17

hot100 15.三数之和

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
hot100 15.三数之和

一、思路:

1.为方便双指针以及跳过相同元素,先把nums排序。

2.枚举nums[i],将问题转化成nums[j] + nums[k] = -nums[i],转变成两数之和的问题。

3.题目要求答案中不能有重复的三元组,因此要避免重复。

(1)在外层循环中,如果发现nums[i] = nums[i - 1],那么nums[i]与后面两个数组成的和为0的三元组,nums[i - 1]也能组成一模一样的三元组,这就重复了。所以遇到nums[i] = nums[i - 1]的情况,直接continue。

(2)在内层循环中,当三数之和等于0时,为避免把相同的三元组计入答案,跳过后续相同的nums[j]和nums[k](也可以只跳过相同的nums[j])。

二、优化:

1.优化一:如果nums[i]与后面最小的两个数相加nums[i] + nums[i + 1] + nums[i + 2] > 0,那么后面不可能存在三数之和等于0,break外层循环(终止循环,执行循环后面的代码)。

2.优化二:如果nums[i]与后面最大的两个数相加nums[i] + nums[n - 2] + nums[n - 1] < 0,那么内层循环不可能存在三数之和等于0,但继续枚举,nums[i]可以变大,所以后面还有机会找到三数之和等于0,continue外层循环(跳过本次迭代,进入下一次循环迭代)。

三、复杂度分析:

1.时间复杂度:O(n^2),其中n为nums的长度。排序O(logn),外层循环枚举第一个数,做法是O(n)双指针,所以总的时间复杂度为O(n^2)。

2.空间复杂度:O(1)。

附代码:

class Solution { public List<List<Integer>> threeSum(int[] nums) { Arrays.sort(nums); List<List<Integer>> res = new ArrayList<>(); int n = nums.length; for(int i = 0;i < n - 2;i++){ int x = nums[i]; if(i > 0 && x == nums[i - 1]){ //跳过重复数字 continue; } if(x + nums[i + 1] + nums[i + 2] > 0){ //优化1 break; } if(x + nums[n - 2] + nums[n - 1] < 0){ //优化2 continue; } int j = i + 1; int k = n - 1; while(j < k){ int sum = x + nums[j] + nums[k]; if(sum > 0){ k--; }else if(sum < 0){ j++; }else{ //三数之和为0 res.add(List.of(x,nums[j],nums[k])); //数组已经排序,相同的数字会相邻,需跳过重复数字 j++; k--; //跳过重复数字 while(j < k && nums[j] == nums[j - 1]){ j++; } //跳过重复数字 while(k > j && nums[k] == nums[k + 1]){ k--; } } } } return res; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 20:03:26

SEO已死?Lovable增长负责人揭秘:你的增长剧本正在失效的真相

SEO已死&#xff1f;Lovable增长负责人揭秘&#xff1a;为什么你的增长剧本正在失效 大家好&#xff0c;我是Franco。 最近在增长圈子里&#xff0c;有一个话题被讨论得热火朝天&#xff1a;传统的SEO&#xff08;搜索引擎优化&#xff09;护城河正在崩塌。 这可不是什么危言耸…

作者头像 李华
网站建设 2026/6/10 1:18:05

LobeChat研究方向建议生成AI

LobeChat&#xff1a;构建可控、可扩展AI对话系统的实践路径 在企业纷纷拥抱大语言模型的今天&#xff0c;一个现实问题摆在面前&#xff1a;如何让强大的LLM真正落地到具体业务中&#xff0c;而不是停留在“能聊几句”的演示阶段&#xff1f;很多团队尝试过直接调用OpenAI API…

作者头像 李华
网站建设 2026/6/10 12:38:08

LobeChat劳动合同条款生成器

LobeChat劳动合同条款生成器 在企业日常运营中&#xff0c;人力资源部门常常面临大量重复性文书工作——尤其是劳动合同的起草。每一份合同都需要确保条款完整、用语规范&#xff0c;并严格符合《劳动合同法》及相关地方政策。传统方式依赖人工撰写或模板套用&#xff0c;不仅效…

作者头像 李华
网站建设 2026/6/10 6:48:10

AI绘画大赛联动:用LobeChat生成创意提示词参赛

AI绘画大赛联动&#xff1a;用LobeChat生成创意提示词参赛 在AI艺术创作的浪潮中&#xff0c;一场无声的变革正在发生。越来越多的设计师、艺术家和开发者发现&#xff0c;真正决定一幅AI生成图像质量的&#xff0c;往往不是模型本身&#xff0c;而是那短短几行“咒语”——提示…

作者头像 李华
网站建设 2026/6/12 6:39:48

LobeChat ISO27001体系建设建议

LobeChat 与 ISO27001&#xff1a;构建可信企业级 AI 聊天系统的实践路径 在当今企业加速智能化转型的背景下&#xff0c;AI 聊天系统已不再是简单的“对话接口”&#xff0c;而是承载知识服务、业务流程甚至核心决策支持的关键平台。随着大语言模型&#xff08;LLM&#xff09…

作者头像 李华
网站建设 2026/6/12 2:59:44

vue基于Springboot框架的流浪猫救助系统 流浪宠物领养系统

目录已开发项目效果实现截图开发技术系统开发工具&#xff1a;核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&…

作者头像 李华