「问题」
「思路」
同3sum,只是多加了一个循环。
首先将数组排序。通过两个循环遍历整个数组,确定结果的前两个数。用target减去前两个数得到后面两个数的和mid。通过夹击的方法求得后面两个数的和sum,对比sum和mid的大小,如果相等的话则返回结果,如果sum>mid
则back指针向前移,如果sum<mid
则front指针向后移。最后将ret结果排序去重。
「结果」
Runtime: 22 ms
「代码」
vector<vector<int>> fourSum(vector<int>& nums, int target) {
sort(nums.begin(),nums.end());
int n=nums.size();
vector<vector<int>>ret;
vector<int>ans(4);
for(int i=0;i<n-3;i++)
{
for(int j=i+1;j<n-2;j++)
{
int mid=target-nums[i]-nums[j];
int front=j+1;
int back=n-1;
while(front<back)
{
int sum=nums[front]+nums[back];
if(mid==sum)
{
ans[0]=nums[i];
ans[1]=nums[j];
ans[2]=nums[front];
ans[3]=nums[back];
ret.push_back(ans);
front++;
back--;
}
else if(mid>sum)
{
front++;
}
else
back--;
}
}
}
sort(ret.begin(),ret.end());
ret.erase(unique(ret.begin(),ret.end()),ret.end());
return ret;
}