leecode454. 四数相加 II
参考解题思路代码随想录
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
unordered_map<int, int> cnt;
//这个题目的思路也是用hash表来实现,因为并不需要排序,所以使用unordered_map来实现
for(auto n1:nums1){
for(auto n2:nums2){
//因为在map种关键字是唯一的,我们用两数之和做关键字,关键字出现的次数做右边的
cnt[n1+n2]++;
}
}
int count = 0;
for(auto n3:nums3){
for(auto n4:nums4){
//因为我们的目的是找到四个数组的和为零的情况,只要之前nums1和nums2中有等于-n3-n4的
//那不就证明他们加上n3和n4等于零吗
if(cnt.find(0-(n3+n4))!=cnt.end()){
count += cnt[-(n3+n4)];
}
}
}
//最后说一下,你也可以n1,n2,n3一起统计,n4,后面统计都可以,但是但是,这个样子不是复杂度最低的
//方法吗,嘿嘿
return count;
}
};