#include <set>
#include <algorithm>
using namespace std;
class Solution
{
public:
vector<vector<int>> fourSum(vector<int>& nums, int target)
{
if(nums.size()<4)
{
vector<vector<int>> result;
return result;
}
set<vector<int>> record;
sort(nums.begin(),nums.end());
for(int i = 0; i < nums.size()-3; i++)
{
for(int j = i+1; j < nums.size()-2; j++)
{
if (j > i + 1 && nums[j] == nums[j - 1]) continue;
int head = j+1,tail = nums.size()-1;
while(head<tail)
{
int temp = nums[i] + nums[j] + nums[head] + nums[tail];
if(temp==target)
{
record.insert({nums[i],nums[j],nums[head],nums[tail]});
head++;
tail--;
}
else if(temp>target)
{
tail--;
}
else
{
head++;
}
}
}
}
return vector<vector<int>>(record.begin(), record.end());
}
};
时间复杂度o(n^3) 两头逼近的方法