15. 3Sum
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res;
if(nums.empty()) return res;
int n=nums.size();
std::sort(nums.begin(),nums.end());
for(int i=0;i<n-2;i++){
int target=-nums[i],front=i+1,back=n-1;
while(front<back){
int sum=nums[front]+nums[back];
if(sum<target)
front++;
else if(sum>target)
back--;
else{
vector<int> temp(3,0);
temp[0]=nums[i];
temp[1]=nums[front];
temp[2]=nums[back];
res.push_back(temp);
while(front<back&&nums[front]==temp[1])
front++;
while(front<back&&nums[back]==temp[2])
back--;
}
}
while(i+1<n&&nums[i+1]==nums[i])
i++;
}
return res;
}
};