【leetcode】3Sum
1,778 views
0
Question:
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)
Anwser 1:
class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector< vector<int> > ret;
int len = num.size();
if(len < 3) return ret;
vector<int> num2;
num2.assign(num.begin(), num.end());
sort( num2.begin(), num2.end() ); // sort O(n*log(n))
vector<int> tmpRet(3);
tmpRet[0] = num2[0] - 1;
for(int i = 0; i < len - 2; i++){ // O(n*m)
int l = i + 1;
int r = len - 1;
if(num2[i] == tmpRet[0]) continue;
tmpRet[0] = num2[i];
while(l < r) {
int sum2 = num2[l] + num2[r];
if(num2[i] + sum2 == 0){
tmpRet[1] = num2[l];
tmpRet[2] = num2[r];
ret.push_back(tmpRet);
while(num2[++l] == num2[l-1] && l < r); // remove same number
while(num2[--r] == num2[r+1] && l < r);
} else if(num2[i] + sum2 < 0){
l++;
} else {
r--;
}
}
}
return ret;
}
};
原文: 【leetcode】3Sum
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2021-01-07 11:39:10
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
转载注明: 【leetcode】3Sum (米扑博客)