/*先对数组进行排序。然后用左右夹逼的方法,不断搜索结果。
不过要注意避开重复元素。
方法参考自: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;
}
};
07-18
07-18
07-18
07-18
07-27
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交