当前位置:网站首页>【leetcode】剑指 Offer II 007. 数组中和为 0 的三个数(双指针)
【leetcode】剑指 Offer II 007. 数组中和为 0 的三个数(双指针)
2022-08-03 19:24:00 【friedrichor】
剑指 Offer II 007. 数组中和为 0 的三个数
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a ,b ,c ,使得 a + b + c = 0 ?请找出所有和为 0 且 不重复 的三元组。
示例 1:
输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
示例 2:
输入:nums = []
输出:[]
示例 3:
输入:nums = [0]
输出:[]
提示:
- 0 < = n u m s . l e n g t h < = 3000 0 <= nums.length <= 3000 0<=nums.length<=3000
- − 1 0 5 < = n u m s [ i ] < = 1 0 5 -10^5 <= nums[i] <= 10^5 −105<=nums[i]<=105
题解
这道题其实是剑指 Offer II 006. 排序数组中两个数字之和 的进阶版,可以参考上道题的思路来进一步解决这道题。
方法一:穷举
具体实现略。
方法二:固定一个值 + 双指针
这个方法可以先看剑指 Offer II 006. 排序数组中两个数字之和 的【方法三:双指针】
首先把 nums 按从小到大排列,固定第一个值 i,0 - nums[i] 即为上一题的 target,然后剩下两个数的查找方法就用上一题双指针的方法即可。此外,这里还要注意去重的问题,因为题目中要求是 不重复 的三元组。
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
res = []
nums.sort() # 从小到大排序
length = len(nums)
for i in range(length - 2):
if i > 0 and nums[i] == nums[i-1]: # 去重
continue
low = i + 1
high = length - 1
while low < high:
if nums[i] + nums[low] + nums[high] == 0:
res.append([nums[i], nums[low], nums[high]])
while low < high: # 去重
low += 1
if nums[low] != nums[low - 1]:
break
while low < high: # 去重
high -= 1
if nums[high] != nums[high + 1]:
break
elif nums[i] + nums[low] + nums[high] > 0:
high -= 1
else:
low += 1
return res
在上一道题中还有个二分查找的方法,不过这题用二分法就需要遍历两次,且去重等条件的实现有些复杂,不推荐使用。
边栏推荐
- 国产虚拟化云宏CNware WinStack安装体验-5 开启集群HA
- net-snmp私有mib动态加载到snmpd
- Zhong Hua, senior architect of Ali: China-Taiwan strategic thinking and architecture practice; including internal implementation manual
- MySQL【变量、流程控制与游标】
- Radondb mysql installation problems
- ctfshow php features
- Postgresql-xl全局快照与GTM代码走读(支线)
- OneNote 教程,如何在 OneNote 中设置页面格式?
- Rust:多线程并发编程
- go语言实现导出string字符串到文件中
猜你喜欢
随机推荐
Postgresql源码(64)查询执行——子模块Executor(2)执行前的数据结构和执行过程
MySQL基础
Postgresql-xl global snapshot and GTM code walking (branch line)
docker mysql 容器中执行mysql脚本文件并解决乱码
【木马免杀】
ctfshow php特性
JumpServer开源堡垒机完成龙芯架构兼容性认证
【WPS-OFFICE-Word】 WPS中样式的运作原理?样式自动更新、自动改变如何处理?样式的管理方法?
idea——同一项目开启多个实例(不同端口)
redis常用命令,HSET,XADD,XREAD,DEL等
CentOS 7 安装mysql
红日安全内网渗透靶场-VulnStack-1
「游戏建模干货」建模大师几步操作,学习经典,赶紧脑补一下吧
Calculation of the array serial number of Likou brush questions (one question per day 7/28)
relocation R_X86_64_PC32 against,/usr/bin/ld: final link failed: Bad value
Protobuf Grpc使用异常 类型有未导出的方法,并且是在不同的软件包中定义
Jingdong cloud released a new generation of distributed database StarDB 5.0
盲僧发现了华点——教你如何使用API接口获取数据
Alibaba senior experts create a learning architecture from scratch, including Alibaba's internal technology stack PPT, PFD actual combat
U-Net生物医学图像分割讲解(Convolutional Networks for BiomedicalImage Segmentation)









