您的位置:首页 > 其它

LeetCode题解——3Sum

2015-07-12 22:11 330 查看
iven 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)

class Solution {
public:
int max(int a,int b){return a>b?a:b;}
int min(int a, int b){return a<b?a:b;}

public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> ans;
sort(nums.begin(),nums.end());

for(int i=0; i<nums.size();i++)
{
if (i == 0 || (i > 0 && nums[i] != nums[i-1])) {
int lo = i+1;
int hi = nums.size()-1;
int target = -nums[i];
while(lo<hi)
{
if(nums[lo]+nums[hi]==target){
vector<int> t;
t.push_back(nums[i]);
t.push_back(nums[lo]);
t.push_back(nums[hi]);
ans.push_back(t);
while(lo<hi&&nums[lo]==nums[lo+1]) lo++;
while(lo<hi&&nums[hi]==nums[hi-1]) hi--;
lo++;hi--;
}
else if(nums[lo]+nums[hi]>target) hi--;
else lo++;
}
}
}
return ans;
}
/* vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> ans;
set<int> iset(nums.cbegin(),nums.cend());

for(int i=0; i<iset.size();i++)
{
for(int j=i+1;j<iset.size();j++)
{
int target = -nums[i]-nums[j];
if(iset.find(target)!=iset.end()){
vector<int> t;
int d1,d2;
d1=max(max(nums[i],nums[j]),target);
d2=min(min(nums[i],nums[j]),target);
t.push_back(d2);
t.push_back(-d1-d2);
t.push_back(d1);
ans.push_back(t);
}
}
}

return ans;
}*/

};


[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: