454.四数相加 II
caution
思路
将 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;
}
};