技术交流可以加:
本人微信:xcg852390212
本人qq:852390212
学习交流qq群1(已满): 962535112
学习交流qq群2: 780902027
三数之和
给定一个包含 n
个整数的数组 nums
,判断 nums
中是否存在三个元素 a
,b
,c
,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
解答
对整个数组排序,先遍历数组取三数中的第一个数nums[i]
,注意num[i]
只到数组的倒数第三个元素,然后剩下两个数需要满足条件target = 0 - nums[i]
,这两个数在数组中num[i]
后面部分,维持两个双指针l
和r
,令tmp = nums[l] + nums[r]
,处理情况如下:
- 如果
tmp < target
,则l
右移一步; - 如果
tmp > target
,则r
左移一步; - 否则,满足条件,添加两个数到结果数组中,同时将
l
和r
分别右移和左移到下一个不重复的元素处。
注意:遍历数组的时候取第一个数的时候过滤重复元素,可以提高查找效率
- 时间复杂度:O(n2)
- 空间复杂度:O(1)
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
int len = nums.size();
if(len < 3)
return vector<vector<int>>();
sort(nums.begin