本文最后更新于630 天前,其中的信息可能已经过时,如有错误请发送邮件到tomding1065@gmail.com
题目链接/文章讲解/视频讲解:https://programmercarl.com/0454.%E5%9B%9B%E6%95%B0%E7%9B%B8%E5%8A%A0II.html
1.虽然因为昨天练习的哈希表的后遗症我现在看到这样的题,查找个元素了,我就想用个unordered_map 碰巧这个题就是用的这个,但是也是看了代码随想录里的,说的是:(节选自代码随想录)
本题乍眼一看好像和0015.三数之和 (opens new window),0018.四数之和 (opens new window)差不多,其实差很多。
本题是使用哈希法的经典题目,而0015.三数之和 (opens new window),0018.四数之和 (opens new window)并不合适使用哈希法,因为三数之和和四数之和这两道题目使用哈希法在不超时的情况下做到对结果去重是很困难的,很有多细节需要处理。
而这道题目是四个独立的数组,只要找到A[i] + B[j] + C[k] + D[l] = 0就可以,不用考虑有重复的四个元素相加等于0的情况,所以相对于题目18. 四数之和,题目15.三数之和,还是简单了不少!
所以其实有碰巧的嫌疑,打开对应的视频还没看呢,我寻思自己按照思路自己写一下代码,今天对于这个我在第一次学习哈希表,数据结构的时候没怎么注意,基础不牢固的部分,我能够一次将代码写对,真的让我挺有感触的。
CPP
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
unordered_map<int ,int> map;
int cnt = 0;
for(int a :nums1){
for(int b :nums2){
map[a+b] +=1;
}
}
for(int c :nums3){
for(int d :nums4){
if(map.find(0-(c+d)) != map.end()){
cnt += map[0-(c+d)];
}
}
}
return cnt;
}
};