题目:
Given an array S of n integers, are there elements a, b, c in S such that a + b + c =
0?
Find all unique triplets in the array which gives the sum of zero.
Note:
- Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
- The solution set must not contain duplicate triplets.
For example, given array S = {-1 0 1 2 -1 -4},
A solution set is:
(-1, 0, 1)
(-1, -1, 2)
解题思路: 先将整个序列排序,然后枚举C的位置,由于结果集中需要去重,所以在我们枚举时需要下点功 夫.在枚举C的位置过程中,由于我们是从头尾遍历找寻满足条件的a,b,所以如果C的位置一定,若 有满足条件的重值,那么,必定相邻,所以我们只需记录上一次找到的满足条件的a,b,c,然后做个 比较即可. 解题代码:class Solution { public: vector<vector<int> > threeSum(vector<int> &num) { sort(num.begin(),num.end()); vector<vector<int> > res ; int n = num.size() , arr[3] = {-1,-1,-1}; for(int k = n - 1 ; k > 1 ; --k) { if( k < n - 1 && num[k] == num[k+1]) continue; long long sum = -num[k] ; int i = 0 , j = k - 1 ; while( i < j ) { long long tmp = num[i] + num[j] ; if(tmp == sum ) { if(num[i] != arr[0] || num[j]!=arr[1] || num[k]!=arr[2]) { arr[0] = num[i] , arr[1] = num[j] , arr[2] = num[k]; res.push_back(vector<int>(arr,arr+3)); } ++i , --j; continue; } tmp > sum ? --j : ++i; } } return res; } };