题目描述:
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:
For example, given array S = {-1 0 1 2 -1 -4}, A solution set is: (-1, 0, 1) (-1, -1, 2)
思路:对数组排序,然后从左到右遍历数组。对于数组中的每一个元素S[i],要在它后面的所有元素中找两个元素令0=S[i]+S[j]+S[k],即-S[i]=S[j]+S[k],则将3sum问题转化为了2sum问题。可以采用hash的方法求解,也可以采用双指针法求解,我采用的是双指针法。
代码:
vector<vector<int> > Solution::threeSum(vector<int> &num) { int i,j,k; vector<vector<int> > result; int length = num.size(); if(length <= 2) return result; sort(num.begin(),num.end()); for(i = 0;i < length - 2;) { int two_sum = 0 - num[i]; for(j = i+1,k = length-1;j < k;) { if((num[j] + num[k]) < two_sum) j++; else if(two_sum == (num[j] + num[k])) { vector<int> temp(3); temp[0] = num[i]; temp[1] = num[j]; temp[2] = num[k]; result.push_back(temp); do j++; while(j < k && num[j] == num[j-1]); do k--; while(j < k && num[k] == num[k+1]); } else if(two_sum < (num[j] + num[k])) k--; } do i++; while(i < num.size() - 2 && num[i-1] == num[i]); } sort(result.begin(),result.end()); return result; }
原文地址:http://blog.csdn.net/yao_wust/article/details/41283619