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

力扣热题100_双指针_15_三数之和

文章目录

  • 题目链接
  • 解题思路
  • 解题代码


题目链接

15. 三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != 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 。

解题思路

1.nums数组长度变量记为n,同时将nums数组进行排序,ans设为数组存储答案;
2.将n进行for range循环(i从0开始,但不为n),
2(1).若i>0 且 i在nums数组所在索引的值与i-1在nums数组所在索引的值一致,跳过
2(2).left初始化为i+1,right初始化为n-1,若left < right,便一直循环下去
2(3)A.若left < right且left > i + 1 且 left在数组nums数组所在索引的值 与 left - 1在数组nums数组所在索引的值一致,则left += 1
2(3)B.若left < right且right > n - 1 且 right在数组nums数组所在索引的值 与 right + 1在数组nums数组所在索引的值一致,则right -= 1
2(4).i、left、及right在nums所在索引的值之和保存为s变量
2(5).若left < right且s == 0时,保存i、left、及right在nums所在索引的值入ans,并将left+=1,right-=1
2(6).若s > 0时,right-=1
2(7).若s < 0时,left+=1

解题代码

class Solution:def threeSum(self, nums: [int]) -> [[int]]:n = len(nums)nums.sort()ans = []for i in range(n):if i > 0 and nums[i] == nums[i - 1]: continueleft, right = i + 1, n - 1while left < right:while left < right and left > i + 1 and nums[left] == nums[left - 1]:left += 1while left < right and right < n - 1 and nums[right] == nums[right + 1]:right -= 1s = nums[i] + nums[left] + nums[right]if left < right and s == 0:ans.append([nums[i], nums[left], nums[right]])left += 1right -= 1elif s > 0:right -= 1else:left += 1return ans

相关文章:

  • React18原理: React核心对象之ReactElement对象和Fiber对象
  • Paper - CombFold: predicting structures of large protein assemblies 论文简读
  • 函数 栈帧
  • Python 修改window桌面背景图片
  • 算法训练营day28(补), 贪心算法2
  • node.js后端+小程序前端+mongoDB(增删改查)
  • 【机器学习基础】决策树(Decision Tree)
  • Qt网络编程-TCP与UDP
  • 寒假学习记录15:Node(网络)
  • 代码随想录day27 Java版
  • 可变参数(c/c++)
  • 【MySQL】表的增删改查(进阶)
  • 每日五道java面试题之java基础篇(五)
  • C++多重继承
  • 【打工日常】使用docker部署可视化工具docker-ui
  • 2019.2.20 c++ 知识梳理
  • CEF与代理
  • Flex布局到底解决了什么问题
  • go append函数以及写入
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JAVA SE 6 GC调优笔记
  • Magento 1.x 中文订单打印乱码
  • Nacos系列:Nacos的Java SDK使用
  • Vue.js 移动端适配之 vw 解决方案
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • vue脚手架vue-cli
  • 初识 webpack
  • 从setTimeout-setInterval看JS线程
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 基于组件的设计工作流与界面抽象
  • 前端代码风格自动化系列(二)之Commitlint
  • Prometheus VS InfluxDB
  • 树莓派用上kodexplorer也能玩成私有网盘
  • # .NET Framework中使用命名管道进行进程间通信
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • $L^p$ 调和函数恒为零
  • (1)Nginx简介和安装教程
  • (AngularJS)Angular 控制器之间通信初探
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)计算机毕业设计ssm电影分享网站
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .CSS-hover 的解释
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET Framework 服务实现监控可观测性最佳实践
  • .net framework4与其client profile版本的区别
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET上SQLite的连接
  • .net专家(张羿专栏)
  • .sh
  • /var/spool/postfix/maildrop 下有大量文件
  • @AliasFor注解
  • @DateTimeFormat 和 @JsonFormat 注解详解