题意
给一个数组和target,要求在数组中找到四个数,使a + b + c + d = target
。
思路
类似于3Sum,排序后枚举其中两个数a和b,然后问题就转化成了2Sum。
时间复杂度O(n3)
代码
class Solution {
private:
vector<vector<int>> ans;
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
int n = nums.size();
for (int i = 0; i < n; i++) {
for (int j = n - 1; j > i; j--) {
int x = target - nums[i] - nums[j];
int k = i + 1, l = j - 1;
while (k < l) {
if (nums[k] + nums[l] == x) {
vector<int> tv(4);
tv[0] = nums[i];
tv[1] = nums[j];
tv[2] = nums[k];
tv[3] = nums[l];
ans.push_back(tv);
while (nums[k] == tv[2] && k < l) k++;
while (nums[l] == tv[3] && k < l) l--;
} else {
if (nums[k] + nums[l] < x) k++;
else l--;
}
}
while (j > i && nums[j] == nums[j - 1]) j--;
}
while (i + 1 < n && nums[i] == nums[i + 1]) i++;
}
return ans;
}
};