454. 四数相加 II
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3,
vector<int>& nums4) {
int result = 0;
unordered_map<int, int> r12;
unordered_map<int, int> r34;
for (auto i : nums1) {
for (auto j : nums2) {
r12[i + j]++;
}
}
for (auto i : nums3) {
for (auto j : nums4) {
r34[i + j]++;
}
}

for(auto it : r12){
int target = -1 * (it.first);
auto find_it = r34.find(target);
if(find_it != r34.end()){
result += (it.second * find_it->second); // 组合相乘
}
}

return result;
}
};

将 num1 和 num2 组合相加,num3 和 num4 组合相加,分别记录在两个不同的 map 容器中。四数之和就被转换为两数之和。

遍历其中一个容器的元素并取相反数,然后从另一个容器中看是否存在。

如果存在就将两个元素中的 value 相乘(当时居然写成加法,调试的时候,才发现逻辑的错误),来表明组合的情况是多少个。