四数相加
给定四个数组,如果四个数相加,如果和为0那么计数加一,最后输出一共有几个组合使得和为0。这题应用哈希表解决
对应题目454. 四数相加 II
哈希表
使用哈希表,保存前两个数组对应的组合之和。value
为两数相之和,如果有相同那么value
加一。之和再遍历剩下两个数组之和的组合,再在哈希表里查询对应数值相加是否为零。使用一个变量result
计数,如果存在那么result = result + hashTable.value
最后返回result
。分析复杂度,由于需要遍历两个数组之间的组合,所以时间复杂度为\(O(N^{2})\);对于空间复杂度来说,也需要开辟相应的空间存储,所以也为\(O(N^{2})\)。
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
unordered_map<int,int> hashTable;
for(int i = 0;i < nums1.size();i++) {
for(int j = 0;j < nums2.size();j++) {
auto iter = hashTable.find(nums1[i] + nums2[j]);
if(iter != hashTable.end()) {
hashTable[nums1[i] + nums2[j]] += 1;
}else {
hashTable[nums1[i] + nums2[j]] = 1;
}
}
}
int result = 0;
for(int i = 0;i < nums3.size();i++) {
for(int j = 0;j < nums4.size();j++) {
auto iter = hashTable.find(-(nums3[i] + nums4[j]));
if(iter != hashTable.end()) {
result += iter->second;
}
/*
*if(hashTable.count(-(nums3[i] + nums4[j]))){
* result += hashTable[-(nums3[i] + nums4[j])];
*}
*/
}
}
return result;
}
标签:四数,int,相加,iter,hashTable,哈希,nums4,result
From: https://www.cnblogs.com/Corleone/p/17276506.html