思想
这道题暴力的写法就是把这四个数组全部遍历一下,也就是O(n^4)时间复杂度
如果用哈希的话,只用遍历前两个数组。
然后检查后两个数组,检查它们的和的负值是否存在于map中。如果存在,添加到计数中。
map哈希
学透哈希表,map使用有技巧!LeetCode:454.四数相加II_哔哩哔哩_bilibili
LeetCode刷题|python版本|第454题|四数相加II_哔哩哔哩_bilibili
code
count用来存放全部次数,初始为0;
map先遍历前两个数组,也就是存放一半的次数。
当后两个数组中有满足条件时,再把后两个的次数加进count里面。
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
int count=0;
unordered_map<int,int> m;
for(int a:nums1)
{
for(int b:nums2)
{
m[a+b]++;
}
}
for(int c:nums3)
{
for(int d:nums4)
{
if (m.find(0- (c + d)) != m.end())
{
count+=m[0-(c+d)];
}
}
}
return count;
}
};