leetcode——3sum
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: 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] ]
解法一:(临时变量多,循环幅度大)
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> des;
if(nums.size()<3)
return des;
int a=0,b=1,c=2;
int tmpa = 0, tmpb = 0, tmpc = 0;
int tmpdata=0;
sort(nums.begin(), nums.end());
while (a<=nums.size()-3)
{
//cout << nums[a] << ":" << nums[b] << ":" << nums[c] << endl;
if (nums[a] + nums[b] + nums[c]==0)
{
/*符合条件的加入数组*/
vector<int> tmp;
tmp.push_back(nums[a]);
tmp.push_back(nums[b]);
tmp.push_back(nums[c]);
des.push_back(tmp);
}
/*保存前一个c的值,寻找下一个与当前c值不一样值的下标*/
tmpc = c;
for (c = c + 1; c<nums.size() && nums[tmpc] == nums[c]; ++c);
if (c >= nums.size())
{
/*保存前一个b的值,寻找下一个与当前b值不一样值的下标*/
tmpb = b;
for (b = b + 1; b<nums.size() && nums[tmpb] == nums[b]; ++b);
c = b + 1;
if (b >= nums.size() - 1)
{
/*保存前一个a的值,寻找下一个与当前a值不一样值的下标*/
tmpa = a;
for (a = a+1; a<nums.size()&&nums[tmpa] == nums[a];++a);
b = a + 1;
c = b + 1;
}
}
}
return des;
}