class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
sort(nums.begin(), nums.end());
vector<vector<int>> vec;
int i, l, h, n = nums.size();
for(i = 0; i < n-2; ++i)
{
if(i == 0 || nums[i] != nums[i-1])
{
l = i+1;
h = n-1;
while(l < h)
{
if(nums[l] + nums[h] == -nums[i])
{
vector<int> v;
v.push_back(nums[i]);
v.push_back(nums[l]);
v.push_back(nums[h]);
vec.push_back(v);
while(l < h && nums[l] == nums[l+1])
++l;
while(l < h && nums[h] == nums[h-1])
--h;
++l;
--h;
}
else if(nums[l] + nums[h] < -nums[i])
++l;
else
--h;
}
}
}
return vec;
}
};