题意
分析
当然写法有很多种了,我自己想了一个写法。就是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
;
}
};
转载请注明原文地址:https://blackberry.8miu.com/read-19141.html