当前位置:网站首页>LeetCode50天刷题计划(Day 10—— 三数之和(20.50-22.40)
LeetCode50天刷题计划(Day 10—— 三数之和(20.50-22.40)
2022-08-01 14:45:00 【国际知名观众】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
世界上最简单也最困难的事情,就是坚持
一、题目
三数之和
给你一个包含 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 <= nums.length <= 3000
-105 <= nums[i] <= 105
二、思路
一开始想用暴破,并一开始就采用将数组排序的方法,按顺序查找,以此去重,但是优化后也有三个测试点过不去,因此选用双指针法:
如果每轮循环固定第一个元素a,那么只需要找到两数之和等于-a的两个元素b和c,那么此三元组求和为某值的问题就退化为两元组求和
注意:每次a固定时,b和c可能有多组解。由于数组是有序的,初始时,b指针指向a后元素,c指针指向末尾元素,并始终维持b<c(不重复)
如果b+c小于所需值,就使b后移令其和增加;如果b+c小于所需值,就使c左移令其和减小,直至b和c相遇.
三、代码
1.没过的暴破(python)
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
#排序,保证输出从小到大
nums.sort()
#整数个数
n=len(nums)
#结果数组
re_list=[]
if n<3 :
return re_list
#暴破
for i in range(n-2):
for j in range(i+1,n-1):
temp=nums[i]+nums[j]
for k in range(j+1,n):
if(temp== -nums[k] and [nums[i],nums[j],nums[k]] not in re_list):
re_list.append([nums[i],nums[j],nums[k]])
return re_list
2.AC的双指针(python)
实在不知道咋去重,估计if([nums[i],nums[j],nums[k]] not in re_list): #去重
很费时间,但好歹过了,能跑就行(嘻)
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
nums.sort()#排序,保证输出从小到大[-4,-1,-1,0,1,2],这是解题重点!!
n=len(nums)#整数个数
re_list=[]#结果数组
if n<3 :
return re_list
#暴破(可以优化为双指针,因为在有序情况下,第二个指针后移时第三指针必须要前移,才能保证为0)
for i in range(n-2):
j=i+1 #j,第二个数的指针,从前向后移动
k=n-1 #k,第三个数的指针,从后往前移动
while(j<k):
if(nums[j]+nums[k]<-nums[i]):
j+=1 #移动j
elif(nums[j]+nums[k]>-nums[i]):
k-=1 #移动k
else:
if([nums[i],nums[j],nums[k]] not in re_list): #去重
re_list.append([nums[i],nums[j],nums[k]]) #bingo
j+=1
return re_list
边栏推荐
- gconf/dconf实战编程(2)利用gconf库读写配置实战以及诸多配套工具演示
- 输出0-1背包问题的具体方案 ← 利用二维数组
- The problem that the column becomes indexed after pd groupby and the aggregation column has no column name
- 接口测试框架开发实践5:配置文件读取
- 牛客刷SQL--6
- 细读《阿里测试之道》
- 十九届浙大城院程序设计竞赛 F.Sum of Numerators(数学/找规律)
- 信息录入率百分百上海强化施工现场建筑工人实名制管理
- 直播系统聊天技术(八):vivo直播系统中IM消息模块的架构实践
- Typora报错:This beta version of Typora is expired
猜你喜欢
随机推荐
HTB-Mirai
热心肠:关于肠道菌群和益生菌的10个观点
如何使用 Mashup 技术在 SAP Cloud for Customer 页面嵌入自定义 UI
final关键字的作用 final和基本类型、引用类型
math.pow()函数用法[通俗易懂]
在网站页脚增加几只戏水的小鱼
我寻找的方向
SQL每日一练(牛客新题库)——第3天: 条件查询
D - Draw Your Cards(模拟)
牛客刷SQL--3
股票策略02 | 技术择时+行业因子+市值轮动
牛客刷SQL--5
VIM实用指南(0)基本概念与初次体验
What is a closure?
超全!全国近90所大学考研报录比汇总!
uniapp 获取cookie与携带cookie请求数据
leetcode.26 删除有序数组中的重复项(set/直接遍历)
接口测试框架开发实践5:配置文件读取
轮询和长轮询的区别
tkinter-TinUI-xml实战(6)问卷