/*先对数组进行排序。然后用左右夹逼的方法,不断搜索结果。
不过要注意避开重复元素。
方法参考自:https://github.com/soulmachine/leetcode*/
class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
vector<vector<int> > result;
if(num.size() < 3) return result;
std::sort(num.begin(), num.end());
for(int i = 0; i < num.size() - 2; ++i){
if( i > 0 && num[i] == num[i-1]) continue;
int j = i + 1, k = num.size() - 1;
while(j < k){
if(num[i] + num[j] + num[k] < 0){
++j;
while(num[j] == num[j-1] && j < k) ++j;
}
else if(num[i] + num[j] + num[k] > 0){
--k;
while(num[k] == num[k+1] && j < k) --k;
}
else{
int tmp[3] = {num[i], num[j], num[k]};
result.push_back(vector<int>(tmp, tmp + 3));
++j;
--k;
while(num[j] == num[j-1] && num[k] == num[k+1] && j < k){
++j;
--k;
}
}
}
}
return result;
}
};LeetCode之3Sum
最新推荐文章于 2019-08-01 18:24:25 发布
299

被折叠的 条评论
为什么被折叠?



