根据:https://blog.csdn.net/weixin_39460182/article/details/80209214
改进一个版本
code:
class Solution
{
public:
vector<vector<int>> fourSum(vector<int>& nums, int target)
{
vector<vector<int>> res;
sort(nums.begin(), nums.end());
for (int m = 0; m<nums.size(); m++)
{
int tarCopy = target;
if (m > 0 && nums[m] == nums[m - 1])
continue;
tarCopy -= nums[m];
for (int k = m + 1; k < nums.size(); ++k) //三数之和的代码
{
int tarCopy2 = tarCopy;
if (k > m + 1 && nums[k] == nums[k - 1])
continue;
tarCopy2 -= nums[k];
int i = k + 1, j = nums.size() - 1;
while (i < j)
{
if (nums[i] + nums[j] == tarCopy2)
{
res.push_back({ nums[m], nums[k], nums[i], nums[j] });
while (i < j && nums[i] == nums[i + 1])
++i;
while (i < j && nums[j] == nums[j - 1])
--j;
++i;
--j;
}
else if (nums[i] + nums[j] < tarCopy2)
++i;
else
--j;
}
}
}
return res;
}
};
leetcode能上82.72%,算不错的了。