当前位置:网站首页>【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
在上一道题中还有个二分查找的方法,不过这题用二分法就需要遍历两次,且去重等条件的实现有些复杂,不推荐使用。
边栏推荐
- 红日安全内网渗透靶场-VulnStack-1
- 手把手教你定位线上MySQL慢查询问题,包教包会
- APT级全面免杀与企业纵深防御体系的红蓝对抗
- Execute the mysql script file in the docker mysql container and solve the garbled characters
- 按需视觉识别:愿景和初步方案
- Don't look down upon the WebSocket!Long connection, stateful, two-way, full-duplex king is Fried
- 阿里巴巴政委体系-第八章、阿里政委工作方法论
- 微信小程序分享功能
- 力扣刷题之分数加减运算(每日一题7/27)
- ctfshow php特性
猜你喜欢
LeetCode 952. 按公因数计算最大组件大小
Radondb mysql installation problems
ECCV 2022 Oral | 满分论文!视频实例分割新SOTA: IDOL
Compose原理-compose中是如何实现事件分法的
阿里巴巴政委体系-第九章、阿里政委启示录
Zhong Hua, senior architect of Ali: China-Taiwan strategic thinking and architecture practice; including internal implementation manual
Kettle 读取 Excel 数据输出到 Oracle 详解
【木马免杀】
FreeRTOS中级篇
epoll + 线程池 + 前后置服务器分离
随机推荐
【C语言学习笔记(七)】C语言重定向输入与输出
【微信小程序】NFC 标签打开小程序
pg_memory_barrier_impl in Postgresql and C's volatile
力扣刷题之合并两个有序数组
软件测试回归案例,什么是回归测试?
idea——同一项目开启多个实例(不同端口)
群辉查看硬盘存储占用的方式
When does MySQL use table locks and when to use row locks?You should know this
ctfshow php features
Postgresql source code (65) analysis of the working principle of the new snapshot system Globalvis
读取 resources 目录下的文件路径的九种方式,你知道多少?
虚拟机vmware设置nat模式上网
京东云发布新一代分布式数据库StarDB 5.0
不要再用if-else
Confused!Ali was abused on the one hand, but was fortunate to be promoted to Huawei's technology, and successfully got the offer, with an annual salary of 40w
go语言实现导出string字符串到文件中
微信小程序分享功能
阿洛的反思
【WPS-OFFICE-Word】 WPS中样式的运作原理?样式自动更新、自动改变如何处理?样式的管理方法?
CS免杀姿势