学习安排根据《代码随想录》~leetcode454
思路是有的,就类似于两个数组在哈希表里面找相反数题型一样,就是多了数组个数。
可能之前写的题目有些遗忘了,一直想着用multiset去做,为了避免重复的,找到后就删掉,为了防止还可能遇到相同的数,删完了再加回来。因此写完的代码严重超时。
最后还是看了答案,看来是自己陷入了set的沼泽了,用map处理会简单很多。
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4)
{
int sum1=0;
int sum2=0;
int numcount=0;
unordered_map<int,int>s;
for(int u:nums1)
{
for(int v:nums2)
{
sum1=v;
sum1+=u;
s[sum1]++;
}
}
for(int i:nums3)
{
for(int j:nums4)
{
sum2=j;
sum2+=i;
if(s.find(-sum2)!=s.end())
{
numcount+=s[-sum2];
}
}
}
return numcount;
}
};
虽然最后自己也写出来了,过程中 s[sum1]++;这一步我一度没理解,后来才醒悟,map【key】=value,而此时的value为次数,即遇到相同的,次数就增加。
但是,个人还是不能理解,s[sum1]++这种写法可以给map 添加值了吗,不应该是make_pair(key,value)之类的吗?
写完再想想,可能之前学过的一些东西忘记了~