Skip to main content

454.四数相加 II

思路

nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0 变换一下,得:

-(nums1[i] + nums[j]) == nums3[k] + nums4[l]

可以先用哈希表计算 -(nums1[i] + nums[j]) 的个数,然后累加 hash[nums3[k] + nums4[l]] 即可。

代码

class Solution {
unordered_map<int, int> m;
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
m.clear();
int ans = 0;
for (int i = 0; i < nums1.size(); i++) {
for (int j = 0; j < nums2.size(); j++) {
m[ -(nums1[i] + nums2[j]) ]++;
}
}
for (int i = 0; i < nums3.size(); i++) {
for (int j = 0; j < nums4.size(); j++) {
ans += m[ (nums3[i] + nums4[j]) ];
}
}
return ans;
}
};