454 - 四数相加 II
思路:
1、哈希表存储1、2数组的所有可能的和及重复和的个数(value);
2、在哈希表中查找(0-(3+4)):
找到:cnt += value;
未找到:不处理,继续下一循环
提交代码
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
unordered_map<int, int> st12;
int cnt = 0;
for(auto e1 : nums1){
for(auto e2 : nums2){
++st12[e1 + e2];
}
}
for(auto e3 : nums3){
for(auto e4 : nums4){
if(st12.end() != st12.find(-e3 - e4)){
cnt += st12[-e3-e4];
}
}
}
return cnt;
}
};
383 - 赎金信
思路:
1、哈希表存储magazine所有元素,元素为key,次数为value;
2、哈希表中遍历查找ransom元素,找到则value-1,未找到则返回false;
提交代码
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
unordered_map<char, int> mpMagazine;
for(auto e : magazine){
++mpMagazine[e];
}
for(auto e : ransomNote){
if(mpMagazine.end() != mpMagazine.find(e) && mpMagazine[e] != 0){
--mpMagazine[e];
continue;
}
else{
return false; //没找到 或者 mpMagazine[e] == 0
}
}
return true;
}
};
15 - 三数之和
有点难,自己写了一个多小时还没写出来,下来再研究研究~~~
18 - 四数之和
应该和三数之和差不多的解法,不好写。。。