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

算法题-11

给你一个整数数组nums,判断是否存在三元组[nums[i], nums[j], nums[k]]满足i != ji != kj != k,同时还满足nums[i] + nums[j] + nums[k] == 0。请你返回所有和为0且不重复的三元组。

注意:答案中不可以包含重复的三元组。

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。

示例 2:

输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。

示例 3:

输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0 。

首先这道题最直观的做法是三重循环,但是三重循环是立方级别的复杂度,关键有两个方面,第一就是我们能否先进行一个排序使其变成有序素组,这样可以方便我们的去重,也可以使用双指针来降低算法的复杂度。

我们先固定一个数然后使用双指针,思路是

for i left = i+1 right = n-1

变成:

nums[i] + nums[left] + nums[right] = 0

然后:如果和大了 → right--,如果和小了 → left++,如果等于 → 记录答案。

一定要进行去重,如果我们发现当前i指向的下一位也是同样的数字,那么我们可以跳出这次循环。
i 去重

if(i > 0 && nums[i] === nums[i - 1]) continue

left 去重

while(left < right && nums[left] === nums[left + 1]) left++

right 去重

while(left < right && nums[right] === nums[right - 1]) right--

整体代码

var threeSum = function(nums) { const res = [] nums.sort((a,b) => a-b) for(let i = 0; i < nums.length - 2; i++) { if(i > 0 && nums[i] === nums[i-1]) continue let left = i + 1 let right = nums.length - 1 while(left < right) { const sum = nums[i] + nums[left] + nums[right] if(sum === 0) { res.push([nums[i], nums[left], nums[right]]) while(left < right && nums[left] === nums[left+1]) left++ while(left < right && nums[right] === nums[right-1]) right-- left++ right-- } else if(sum < 0) { left++ } else { right-- } } } return res }
http://www.jsqmd.com/news/375222/

相关文章:

  • 探索Agentic AI上下文工程安全的技术创新,提示工程架构师的探索与实践
  • 算法题-12
  • Markdown学习笔记2.2分级标题
  • 2026.2.12
  • 基于 OpenCV 的模板匹配技巧实例
  • 题解:P14614 [2019 KAIST RUN Fall] Bigger Sokoban 40k
  • 鸿蒙架构师修炼之道-如何成为团队的架构师
  • 全链路Token智控,「秒云Tokens管家」解锁AI工程优化新范式
  • MIAOYUN | 每周AI新鲜事儿 260212
  • 用 Go 实现一个可长期运行的 GitHub Webhook 服务实践
  • wpf自适应布局
  • 理性愉悦:分块套 NTT
  • 手搓一个Clawdbot
  • Markdown语法学习笔记2.1对字体设置斜体、粗体、删除线
  • 软件架构能力和任务分解编排能力是Ai大浪潮下的核心技能
  • 比尼德斯实业有限公司是干嘛的?文登教育
  • 在python 3.14 容器中安装和使用chdb包
  • Markdown语法学习笔记1快捷键
  • 小白从零开始勇闯人工智能:机器学习初级篇(PCA素材降维)
  • 题解:P15206 [SWERC 2018] Dishonest Driver
  • 题解:AT_pakencamp_2024_day1_c One Half
  • Burp Suite 入门文档(官方翻译)
  • PyTorch项目合集一
  • springboot民宿管理系统--附源码32900 - 详解
  • 免费城市夜景视频素材网站推荐
  • TikTok Shop东南亚2026退货新规来袭!海外仓这样布局抢占先机
  • 完整教程:MySQL数据可视化实战:从查询到图表全攻略
  • 面向大模型开发:在项目中使用 TOON 的实践与流式处理深度解析:原理、实战与踩坑记录
  • 3:【GitHub连接】Connection timed out port 22 → 改用443端口SSH(公司/校园网2026常见)
  • 探索 LDO 电路:模拟集成电路设计的实践之旅