四数之和:link
1.题目分析
类似于三数之和,在本题中我么要固定两个数,去寻找满足条件的另外两个数,注意去除重复的组合。
2.示例代码
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
vector<vector<int>> ret;
if (nums.size() < 4)
return ret;
for (int i = 0; i < nums.size() - 3; ++i) {
if (i == 0 || nums[i] != nums[i - 1]) {
for (int j = i + 1; j < nums.size() - 2; ++j) {
if (j == i + 1 || nums[j] != nums[j - 1]) {
int twoSum = target - nums[i] - nums[j];
int lo = j + 1, hi = nums.size() - 1;
while (lo < hi){
if (nums[lo] + nums[hi] < twoSum)
lo++;
else if (nums[lo] + nums[hi] > twoSum)
hi--;
else {
ret.push_back({ nums[i], nums[j], nums[lo], nums[hi] });
while(lo < hi && nums[lo] == nums[lo+1]){
lo++;
}
lo++;
}
}
}
}
}
}
return ret;
}
};