代码
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
sort(nums.begin(),nums.end());
int n=nums.size();
vector<vector<int>> res;
for(int i=0;i<n-3;++i){
if(i>0&&nums[i]==nums[i-1]){
continue;
}
for(int j=1+i;j<n-2;++j){
if(j>i+1&&nums[j]==nums[j-1]){
continue;
}
int left=j+1;
int right=n-1;
while(left<right){
long long sum=(long long)nums[i]+(long long)nums[j]+(long long)nums[left]+(long long)nums[right];
if(sum==target){
res.push_back({nums[i],nums[j],nums[left],nums[right]});
left++;
right--;
while(left<right&&nums[left]==nums[left-1])left++;
while(left<right&&nums[right]==nums[right+1])right--;
}
else if(target<sum){
right--;
}
else{
left++;
}
}
}
}
return res;
}
};
思路:
类似三数之和,多加一个循环遍历,注意整数溢出。