class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
sort(nums.begin(),nums.end());
int n = nums.size();
vector<vector<int>> ans;
for(int i = 0;i < n - 3;++i)
{
if(i > 0 && nums[i] == nums[i-1]) continue;
for(int j = i+1; j < n -2 ;++j)
{
if(j > i+1 && nums[j] == nums[j-1]) continue;
int lo = j + 1;
int hi = n-1;
while(lo < hi)
{
if(nums[lo] + nums[hi] < target - nums[i] - nums[j])
++lo;
else if(nums[lo] + nums[hi] > target - nums[i] - nums[j])
--hi;
else
{
vector<int> tmp(4,-1);
tmp[0] = nums[i];
tmp[1] = nums[j];
tmp[2] = nums[lo];
tmp[3] = nums[hi];
ans.push_back(tmp);
//quchong
int k = lo+1;
while(k < hi && nums[k] == nums[lo])k++;
lo = k;
k = hi-1;
while(k > lo && nums[k] == nums[hi])k--;
hi = k;
}
}
}
}
return ans;
}
};