当前位置:网站首页>【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
在上一道题中还有个二分查找的方法,不过这题用二分法就需要遍历两次,且去重等条件的实现有些复杂,不推荐使用。
边栏推荐
- 盘点在线帮助中心对企业能够起到的作用
- 群辉查看硬盘存储占用的方式
- LeetCode 952. 按公因数计算最大组件大小
- Postgresql source code (65) analysis of the working principle of the new snapshot system Globalvis
- Power button brush the topic of merging two orderly array
- LOL英雄联盟卡顿掉帧问题解决办法 2022年8月1日
- JumpServer开源堡垒机完成龙芯架构兼容性认证
- Solution for no navigation bar after Word is saved as PDF
- 线上一次JVM FullGC搞得整晚都没睡,彻底崩溃
- flex布局
猜你喜欢

阿里巴巴政委体系-第九章、阿里政委启示录

MYSQL误删数据恢复

LeetCode 952. Calculate Maximum Component Size by Common Factor

U-Net生物医学图像分割讲解(Convolutional Networks for BiomedicalImage Segmentation)

京东云发布新一代分布式数据库StarDB 5.0

基于DMS的数仓智能运维服务,知多少?

按需视觉识别:愿景和初步方案

阿里巴巴政委体系-第八章、阿里政委工作方法论

FreeRTOS中级篇

Line the last time the JVM FullGC make didn't sleep all night, collapse
随机推荐
ctfshow php features
The ecological environmental protection management system based on mobile GIS
U-Net生物医学图像分割讲解(Convolutional Networks for BiomedicalImage Segmentation)
SQL server 实现触发器备份表数据
阿洛的反思
力扣刷题之分数加减运算(每日一题7/27)
Postgresql-xl global snapshot and GTM code walking (branch line)
入门3D建模基础教程详细分解
利用net-snmp的库实现snmpget,snmpset
Web项目中简单使用线程池
机器学习的方法总结
Postgresql快照优化Globalvis新体系分析(性能大幅增强)
docker mysql 容器中执行mysql脚本文件并解决乱码
ECCV 2022 Oral | 满分论文!视频实例分割新SOTA: IDOL
从文本匹配到语义相关——新闻相似度计算的一般思路
手把手教你定位线上MySQL慢查询问题,包教包会
Interview Blitz: What Are Sticky Packs and Half Packs?How to deal with it?
go语言实现导出string字符串到文件中
X86 function call model analysis
读取 resources 目录下的文件路径的九种方式,你知道多少?