每日一道算法题-三个数的和
October 09, 2019
1645
题目描述
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4]
,
满足要求的三元组集合为:
1 |
|
解题思路
如果使用普通算法,那么复杂度为O(n3),这样的方式效率很低;
我们可以采用分治的思想,想要找出三个数相加等于0,我们可以先将nums进行排序,然后依次遍历,每一项nums[i]我们都认为它最终都能够组成0中的一个数字(当然当nums[i]大于0的时候不可能为0),那么我们的目标就是找到剩下的元素(除a[i])两个相加等于-a[i]。
通过上面的思路,我们的问题转化为了给定一个数组,找出其中两个相加等于给定值, 这个问题是比较简单的, 我们只需要对数组进行排序,然后双指针解决即可。 加上我们需要外层遍历依次数组,因此总的时间复杂度应该是O(N^2)
关键
- 排序之后,用双指针
- 分治
代码:
1 |
|
- 本文作者:winter chen
- 本文链接:https://blog.winterchen.com/2019/10/09/2019-10-09-arithmetic-15-3-sum/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!
查看评论