题目链接:https://leetcode.com/problems/3sum/description/
题意:给一个数组,找出数组中的三个元素组成三元组[a,b,c],使得a+b+c=0,三元组不得重复。
思路:首先将数组从小到大排序,之后先固定a,对a后的数组进行头尾双指针搜索,使得b和c相互靠近,根据a+b+c的大小判断每次移动b还是c,注意三元组不能重复,所以要跳过重复元素。
代码:
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int> > res;
sort(nums.begin(),nums.end());
int i=0,j,k;
int tail=nums.size()-1;
while(i<=tail-2)
{
int a=nums[i];
j=i+1;
k=tail;
while(j<k)
{
int b=nums[j];
int c=nums[k];
int sum=a+b+c;
if(sum==0) res.push_back({a,b,c});
if(sum<=0)
while(nums[j]==b&&j<k)
j++;
if(sum>=0)
while(nums[k]==c&&j<k)
k--;
}
while (nums[i]==a&&i<=tail-2)
i++;
}
return res;
}
};