class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
unordered_map<int,int>map;//key:a+b的数值,value:a+b数值出现的次数
for(int a : nums1)
{
for(int b : nums2)
{
map[a+b]++;//遍历nums1、nums2两个容器,并将两和放进map中
}
}
int count = 0;//用统计a+b+c+d=0的次数
for(int c : nums3)
{
for(int d : nums4)
{
if(map.find(0-(c+d))!=map.end())//遍历nums3,nums4,查找map中是否有(0-(c+d))出现
{
count += map[0-(c+d)];
}
}
}
return count;
}
};
小记:
for(int a : nums1)是一种循环方式,意思是从nums1中依次拿出元素赋值给a
eg:
int b[] = { 1, 2, 3, 4 };
//for(int a : b)
for (int temp1 : b)
{
cout << temp1;
}
与下面的方式等价:
for (int* p = &b[0]; p != &b[4]; p++)
{
int a = *p;
cout << a;
}
输出:1234

本文介绍了如何使用C++解决四数之和的问题,通过双指针和哈希表来高效地计算数组中四个数的和等于特定值的组合数量。主要涉及算法、哈希映射和二维数组的应用。
1063

被折叠的 条评论
为什么被折叠?



