双指针法。
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
vector<vector<int>> ans;
sort(nums.begin(), nums.end());
for (int i = 0; i < nums.size(); i ++){
for (int j = nums.size() - 1; j > i; j --){
int l = i + 1, r = j - 1;
int t = target - nums[i] - nums[j];
while (l < r){
if (nums[l] + nums[r] < t)
l ++;
else if (nums[l] + nums[r] > t)
r --;
else{
vector<int> t = {nums[i], nums[l], nums[r], nums[j]};
ans.push_back(t);
while (l < r && nums[l + 1] == nums[l]){
l ++;
}
l ++;
while (l < r && nums[r - 1] == nums[r]){
r --;
}
r --;
}
}
while(nums[j - 1] == nums[j] && j > i){
j --;
}
}
while (nums[i + 1] == nums[i]){
i ++;
}
}
return ans;
}
};