就是在三数相加基础上再加一套循环遍历
但是每次都因为一些小错误提交失败,就很难受…
class Solution
{
public:
vector<vector<int>> fourSum(vector<int> &nums, int target)
{
sort(nums.begin(), nums.end());
vector<vector<int>> v;
int n = nums.size();
int p1 = 0, p2;
int left, right, low, high;
while (p1 < n&&n>=4)
{
while (p1 > 0 && p1 < n && nums[p1] == nums[p1 - 1])
p1++;
if (p1 >= n)
break;
p2 = p1 + 1;
while (p2 < n)
{
while (p2 > 1 + p1 && p2 < n && nums[p2] == nums[p2 - 1] )
p2++;
if (p2 >= n)
break;
low = p2 + 1;
high = n - 1;
while (low < high)
{
int t = nums[low] + nums[high];
int t1 = target - nums[p1] - nums[p2];
if (t < t1)
low++;
else if (t > t1)
high--;
else
{
v.push_back({nums[p1], nums[p2], nums[low], nums[high]});
left = nums[low];
right = nums[high];
low++;
high--;
while (low < high && nums[low] == left)
low++;
while (low < high && nums[high] == right)
high--;
}
}
p2++;
}
p1++;
}
return v;
}
};