Leetcode打卡 | No.015 三数之和

简介: 欢迎和小詹一起定期刷leetcode,每周一和周五更新一题,每一题都吃透,欢迎一题多解,寻找最优解!这个记录帖哪怕只有一个读者,小詹也会坚持刷下去的!

No.15 三数之和

题目:

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

注意答案中不可以包含重复的三元组。

示例:(可左右滑动)

例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:
[
 [-1, 0, 1],
 [-1, -1, 2]
]

分析:第一道题是两数之和,现在三数,后边会不会四数,五数?还真有四数哈哈。先看这一题,看题目示例看得出来,自动过滤掉了重复三元组,并且是排好序的格式输出,这里可以先将列表进行sort()方法排序。之后进行处理。

第一想法,是固定两个数,然后找第三个数是否在列表之中,且按照符合题意的形式输出。遍历所有情况可以用两层循环嵌套,之后判断第三个数是否在列表的切片之中。简单说步骤如下:

  1. 列表排序,sort()方法
  2. 两层循环嵌套,按照左到右(小到大的方向)遍历
  3. 判断第三个数(即第i,j,个数之和的相反数)是否在j之后的列表切片nums[j+1:]中

代码如下,应该很好理解!

35.jpg


此方法,切实可行,只不过两层循环嵌套,在列表长度较大时会超时!

36.jpg


于是第二种想法。固定一个数,另外两个数之和为第一个数的相反数。这里主要是利用排序后的列表首位向中间逼近的思路执行。步骤介绍如下:

  1. 列表排序,sort()方法
  2. 一层循环,固定一个数,注意从第二个位置开始要考虑是不是和前一个位置的数值相等,避免做不必要的重复计算,比如代码中举例[-1,-1,0]
  3. 固定一个数后,另外两个数索引为除去第一个数的首尾位置。
  4. 取固定数的相反数为目标值target,如果另外两个数之和大于目标值,尾部索引减一,反之首部索引加一
  5. 不大不小即相等,记录这一个解,并首尾索引分别加减一,寻找其他解

代码如下所示:

37.jpg



这一个方法只有一层循环,计算量小很多,结果也很不错,beat90%多了,可以吃鸡腿了!打赏在哪里!

38.jpg



相关文章
|
3月前
【LeetCode 17】5.7四数之和
【LeetCode 17】5.7四数之和
34 1
|
5月前
|
算法
LeetCode第18题四数之和
该文章介绍了 LeetCode 第 18 题四数之和的解法,与三数之和类似,通过先排序,再用双指针确定坐标并去重的方式解决,关键是确定四个坐标,前两个通过两层循环确定,后两个通过首尾双指针确定,同时总结了双指针可减少循环次数,使解决方式更简单高效。
LeetCode第18题四数之和
|
7月前
|
算法 索引
【洛谷 P1923】【深基9.例4】求第 k 小的数 题解(快速排序)
该题目要求输入一组不超过5000000个奇数个整数,并找出其中第k小的数,不使用`nth_element`函数,而是通过实现快速排序来解决。样例输入为5个数1, 4, 3, 2, 5,k=1,输出第1小的数即最小值2。代码中定义了快速排序函数`quickSort`和划分函数`partition`,并使用`read`函数读取输入。在主函数中对数组进行排序后输出第k个元素。
66 0
|
7月前
|
算法 容器
【LeetCode刷题】三数之和、四数之和
【LeetCode刷题】三数之和、四数之和
|
8月前
[leetcode] 四数之和 M
[leetcode] 四数之和 M
|
8月前
|
Java 测试技术 C++
leetcode-18:四数之和
leetcode-18:四数之和
49 0
|
8月前
|
Java C++ Python
leetcode-15:三数之和
leetcode-15:三数之和
45 0
|
算法 安全 Swift
LeetCode - #18 四数之和
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
leetcode:18.四数之和
这题和前面的一道三数之和类似,解题的思路都一样,这里直接选取两个基准就可以了,然后循环出所有的组合进行判断,如果正好相等那么就加入Set集合中。
65 0
|
测试技术 索引
leetcode_15. 三数之和
题目链接: 15. 三数之和 据说华为的机试经常考这题,而且这道题也是扩展性极强的一道题,你可以看到18. 四数之和,或者人为修改的五数之和,六数之和,乃至n 数之和,也就是
leetcode_15. 三数之和