day7
卡住的点:题目给了四个数组,我只会处理两个数组之间的查找。比如说,数组交集。
那么这里就把四个数组的处理变成两个数组的处理。
将 num1 数组 与 num2 数组 之间的元素之和算出来放到map中,在遍历 num3 和 num4之和。依据 这个和去查找,是否map中出现了,能让和为0的数。
新学到的:
一种新的遍历数组的方法:有点意思!
for(int a : nums1)
for(int b : nums2)
map[a + b]++;
注意的点:
1. key 和 value 需要放什么进去
key就不用说了,放的是元素之和。value的话我们需要记录该 和 出现了多少次。因为出现了多少次,我们就找到几组。
2. count 应该怎么变?
如果找到了对应的key,那么key 对应的 value 就表示出现了几次。所以 count += value
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
// 我卡住的点 : 不知道怎么将四个处理成两个
unordered_map<int,int> map;
int count = 0;
// 将 a+b 的值存入一个map中
for(int a : nums1)
for(int b : nums2)
map[a + b]++;
// 遍历去 另两个数组中找
for(int c : nums3)
{
for(int d : nums4)
{
int s = 0 - (c + d); // s 就是我们需要找的数、
if(map.find(s) != map.end())
{
auto it = map.find(s); // 还在这卡了一下,忘了用迭代器来存指针了
count += it->second;
}
}
}
return count;
}
};