和三数之和很像,再套一层循环:LeetCode第 15 题:三数之和(C++)_qq_32523711的博客-CSDN博客
class Solution{
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
if(nums.size() < 4) return {};
vector<vector<int> > res;
sort(nums.begin(),nums.end());
for(int p = 0; p < nums.size()-3; ++p){
if(p != 0 && nums[p] == nums[p-1]) continue;//去重
for(int i = p+1; i < nums.size()-2; ++i){
if(i != p+1 && nums[i] == nums[i-1]) continue;//去重
int j = i+1, k = nums.size()-1;//两个边界
while(j < k){
if(nums[p] + nums[i] + nums[j] + nums[k] > target) --k;//右边界大了
else if(nums[p] + nums[i] + nums[j] + nums[k] < target) ++j;//左边界小了
else{
res.push_back({nums[p], nums[i], nums[j++], nums[k--]});
while(j < k && nums[j] == nums[j-1]) ++j;//去重
while(j < k && nums[k] == nums[k+1]) --k;
}
}
}
}
return res;
}
};