三数之和
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res;
if(nums.size()<3) return res;
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size();++i)
{
if(i>0&&nums[i]==nums[i-1])
{
continue;
}
int left=i+1;
int right=nums.size()-1;
while(left<right)
{
if(nums[i]+nums[left]+nums[right]>0) --right;
else if(nums[i]+nums[left]+nums[right]<0) ++left;
else
{
res.push_back({nums[i],nums[left],nums[right]});
while(left<right&&nums[left]==nums[left+1]) ++left; //continue;
while(left<right&&nums[right]==nums[right-1]) --right; //continue;
if(left<right)
{
++left;
--right;
}
}
}
}
return res;
}
};
四数之和
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
sort(nums.begin(),nums.end());
vector<vector<int>> res;
for(int i=0;i<nums.size();++i)
{
if(i>0&&nums[i]==nums[i-1]) continue;
for(int j=i+1;j<nums.size();++j)
{
if(j>i+1&&nums[j]==nums[j-1]) continue;
int left=j+1;
int right=nums.size()-1;
while(left<right)
{
if(nums[i]+nums[j]>target-nums[left]-nums[right]) --right;
else if(nums[i]+nums[j]<target-nums[left]-nums[right]) ++left;
else{
res.push_back((vector<int>){nums[i],nums[j],nums[left],nums[right]});
while(left<right&&nums[right]==nums[right-1]) --right;
while(left<right&&nums[left]==nums[left+1]) ++left;
if(left<right)
{
--right;
++left;
}
}
}
}
}
return res;
}
};