思路:
取两个数组的和。(复杂度n^2)。在map里找另外两个的和
就比暴力而言从n^4变到两个n^2
感觉呆呆的照着答案抄。有点怪。先这样吧
储备:
问题重点:
最后:
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
unordered_map<int,int> mp;//key:a+b的数值,value:a+b数值出现的次数
for (int a:nums1) {
for (int b:nums2) {
mp[a+b]++;
}
}
int cnt=0;
for (int c:nums3) {
for (int d:nums4) {
if (mp.find(0-c-d)!=mp.end()) {
cnt+=mp[0-c-d];//方案数累加
}
}
}
return cnt;
}
};