题意
分析
当然写法有很多种了,我自己想了一个写法。就是a+b+c+d=t,可以变为:
a+b=t-(c+d)=x
这个时候我们首先把a+b给存起来,然后枚举剩下两个数。看看存不存在,存在就符合。当然这里需要去重,搞个set去一下重。比较投机取巧。
代码
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
map<int, vector<pair<int, int>>>mp;
for (int i = 0; i < nums.size(); i++) {
for (int j = i + 1; j < nums.size(); j++) {
mp[nums[i] + nums[j]].push_back(make_pair(i, j));
}
}
set<vector<int>>s;
for (int i = 0; i < nums.size(); i++) {
for (int j = i + 1; j < nums.size(); j++) {
int tem = nums[i] + nums[j];
tem = target - tem;
if (mp.find(tem) == mp.end())continue;
for (auto id : mp[tem]) {
int idx = id.first;
int idy = id.second;
if (idx > idy)swap(idx, idy);
if (idx == i||idx==j||idy==i|| idy == j)continue;
vector<int>tem{ nums[i],nums[j],nums[idx],nums[idy]};
sort(tem.begin(), tem.end());
s.insert(tem);
}
}
}
vector<vector<int>>ans;
for (auto t : s) {
ans.push_back(t);
}
return ans;
}
};