15. 三数之和 (三指针解)
原题:
题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum
解题思路
一开始想使用暴力解法,时间复杂度接近O(n³),同时难以消除重复的组合,该方法失败。
后来又想了使用双指针+排序解决,从首尾分别向中间遍历,时间复杂度虽然降低了不少,但是同样难以消除重复的组合,因此该方法也失败。
最后无奈参考了题解,发现需要用到三指针+排序实现。跟我的方法二的思想类似,只不过还需要一个指针来固定一个数,动态的控制另外两个数。后来,按照题解的方法解出来后,仔细想了想,如果求两数之和等于0的所有不重复组合,两指针+排序也是轻松可以实现的。那么推到三数之和,四数之和,是不是需要相对应的指针呢?虽然没有达到对于N数之和证明的实力,不过就先假设这个猜想成立吧。
本题解的关键点:
我总结了一句话,对于去掉重复的组合,最清晰的方法应该就是先排序,然后针对三个数字(三个指针)都需要跳过相邻重复的数字。
时间复杂度平均为O(n²),空间复杂度为O(1)。
代码
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!