vector<vector<int>> fourSum(vector<int> &nums, int target) {
sort(nums.begin(), nums.end());
vector<vector<int>> v;
if (nums.size() < 4) return v;
int l1 = 0, l2, r2, r1;
for (; l1 < nums.size() - 3; l1++) {
if (l1 > 0 && nums[l1] == nums[l1 - 1]) continue;
for (l2 = l1 + 1; l2 < nums.size() - 2; l2++) {
if (l2 > l1 + 1 && nums[l2] == nums[l2 - 1]) continue;
r2 = l2 + 1, r1 = nums.size() - 1;
while (r2 < r1) {
int total = nums[l1] + nums[l2] + nums[r2] + nums[r1];
if (total > target)
while (r2 < r1 && nums[r1] == nums[--r1]);
else if (total < target)
while (r2 < r1 && nums[r2] == nums[++r2]);
else {
v.emplace_back(vector<int>{nums[l1], nums[l2], nums[r2], nums[r1]});
while (r2 < r1 && nums[r1] == nums[--r1]);
while (r2 < r1 && nums[r2] == nums[++r2]);
}
}
}
}
return v;
}
18. 四数之和
最新推荐文章于 2024-02-05 15:12:00 发布