当前位置:网站首页>【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
在上一道题中还有个二分查找的方法,不过这题用二分法就需要遍历两次,且去重等条件的实现有些复杂,不推荐使用。
边栏推荐
- Brush the topic of mobile zero power button
- 【Azure 事件中心】使用Azure AD认证方式创建Event Hub Consume Client + 自定义Event Position
- CS kill-free pose
- 阿里巴巴政委体系-第五章、阿里政委体系建设
- 图像超分——Real-ESRGAN快速上手
- FreeRTOS Intermediate
- LeetCode 622. 设计循环队列
- 力扣刷题之爬楼梯(7/30)
- 力扣刷题之求两数之和
- Teach you to locate online MySQL slow query problem hand by hand, package teaching package meeting
猜你喜欢
Interview Blitz: What Are Sticky Packs and Half Packs?How to deal with it?
基础软件与开发语言开源论坛| ChinaOSC
2022年最新的Android面试大厂必考174题(附带详细答案)
MySQL【变量、流程控制与游标】
Shell编程之循环语句
告诉你0基础怎么学好游戏建模?
傅里叶变换(深入浅出)
盘点在线帮助中心对企业能够起到的作用
Alibaba senior experts create a learning architecture from scratch, including Alibaba's internal technology stack PPT, PFD actual combat
MYSQL误删数据恢复
随机推荐
ctfshow php features
揭秘5名运维如何轻松管理数亿级流量系统
力扣解法汇总899-有序队列
要想成为黑客,离不开这十大基础知识
LOL英雄联盟卡顿掉帧问题解决办法 2022年8月1日
【夜莺监控方案】08-监控msyql集群(prometheuse+n9e+mysqld_exporter)
X86函数调用模型分析
Radondb mysql installation problems
Shell编程之循环语句
图像超分——Real-ESRGAN快速上手
阿里巴巴政委体系-第六章、阿里政委体系运作
红日安全内网渗透靶场-VulnStack-1
CC2530_ZigBee+华为云IOT:设计一套属于自己的冷链采集系统
「游戏建模干货」建模大师几步操作,学习经典,赶紧脑补一下吧
Matlab论文插图绘制模板第42期—气泡矩阵图(相关系数矩阵图)
Line the last time the JVM FullGC make didn't sleep all night, collapse
阿里巴巴政委体系-第九章、阿里政委启示录
利用net-snmp的库实现snmpget,snmpset
APT级全面免杀与企业纵深防御体系的红蓝对抗
金鱼哥RHCA回忆录:CL210管理计算资源--管理计算节点+章节实验