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

基础数据结构之数组的双指针技巧之对撞指针(两端向中间):三数之和(LeetCode 15 中等题)

**题目:**给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。
**解题思路:**三层循环暴力法会得到重复结果,所以需要先排序去除重复。
双指针对撞也需要先排序,之后先固定一个初始值,之后需要俩数字和初始值结合起来为0,俩数字如何选择?可以通过第一个数字和最后一个数字加起来看跟目标值的对比,大了说明需要变小一点,那就移动大数那边的指针,否则,就移动小数那边的指针。其中,边界条件需要考虑:初始值一致或者双指针对应的俩数字跟相邻数字一致的话都会导致出现重复结果,需要进行排除。

class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:# 预处理:先排序,避免三个值一致但顺序不同的情况出现nums.sort()result = []n = len(nums)for i in range(0,n-2):# 边界处理:i值一样的也需要跳过(已经处理过则跳过)if nums[i] == nums[i-1] and i > 0:continue# 先确定一个数,剩下两个数分别头尾指针开始对撞。根据和的大小决定哪个指针移动j = i + 1k = n - 1while j < k:target = nums[i]+nums[j]+nums[k]if target == 0:result.append([nums[i],nums[j],nums[k]])# 边界处理:j、k两侧一致的元素需要跳过(已经处理过则跳过)while j < k and nums[j] == nums[j+1]:j+=1while j < k and nums[k] == nums[k-1]:k-=1# 同时移动前需要排除大小一致的元素,避免结果重复j+=1k-=1elif j < k and target<0:j+=1elif j < k and target>0:k-=1return result
http://www.dtcms.com/a/574589.html

相关文章:

  • 网站鼠标悬停动态效果代码网站一个月
  • ASP.NET网站建设实战网络推广的方式有哪些?
  • 防止缓存穿透
  • 防火墙培训
  • 李宏毅机器学习笔记40
  • 网站开发甲方需求文档华为手机网络营销方式
  • 许昌旅游网站建设现状室内设计师联盟网站
  • 做公众号排版的网站常见的网络营销形式有哪些
  • AXI总线专题-AXI转SPI(接口)
  • 甘肃兴华建设集团网站怎么搭建一个视频网站
  • 珠海手机网站建设公司wordpress 数据库 备份
  • wordpress可以卸载360网站seo手机优化软件
  • 南山区住房和建设局网站莱芜都市网二手车租车
  • 中国建设银行网站查询密码是什么意思网站子页面怎么做的
  • 企业手机网站建设方案怎么自己建设一个网站
  • 集群网络技术2:流量控制与拥塞管理PFC ECN/DCQCN
  • 制作类网站哪里做网络推广
  • Spring Boot中使用Quartz实现动态定时任务
  • 2.4 python装饰器在 Web 框架和测试中的实战应用
  • 从容器化到自动化:Spring Boot 项目 Docker 部署与 GitLab CI/CD 集成 Harbor 全流程
  • 基于springboot的web的音乐网站开发与设计
  • AIIData数据中台商业版+开源版双模式
  • 音画同步革命:IndexTTS2深度解析——B站开源的情感化+时长可控TTS新标杆
  • 如果做淘宝网站wordpress 七牛视频播放
  • 成都模版网站制作网站建设项目结构分析
  • Transformer原理与过程详解
  • 迷你主机做网站c语言开发网站
  • 水利建设相关网站百度手机版下载
  • Nestjs框架: 微服务注册中心架构设计与Consul实战
  • 给别人网站做跳转网络公司排名中国