leetcode 15. 3Sum (k-sum问题,two pointer)
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.
思路:排序O(nlgn),然后枚举一个元素O(n),对于每个元素,在剩下的区间中 two pointer O(n)
整体复杂度 O(n^2)。
hash的解法以后补。
/* ***********************************************
Author :111qqz
Created Time :2017年04月13日 星期四 16时07分00秒
File Name :15.cpp
************************************************ */
class Solution {
public:
set<vector<int> >se;
vector<vector<int> >res;
vector<vector<int>> threeSum(vector<int>& nums) {
sort(nums.begin(),nums.end());
int n = nums.size();
for ( int i = 0 ; i <=n-3 ; i++)
{
int head = i+1;
int tail = n-1;
int tar = -nums[i];
while (head<tail)
{
if (nums[head]+nums[tail]==tar)
{
vector<int>tmp;
tmp.push_back(nums[i]);
tmp.push_back(nums[head]);
tmp.push_back(nums[tail]);
se.insert(tmp);
head++;
tail--;
}
else if (nums[head]+nums[tail]<tar) head++;
else tail--;
}
}
for ( auto &it : se)
res.push_back(it);
return res;
}
};