刷题D3
继续刷题
LC454 四数相加2
将四个整数数组两两分开,遍历前两个数组并记录两数之和出现的次数。然后遍历后两个数组的两数之和,看他们的互补数是否出现过。如果出现了,ans+=出现过的次数。
这里要求的是可以出现重复的情况,所以难度也没这么高。
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
unordered_map<int,int> umap;
for(auto a:nums1){
for(auto b:nums2){
umap[a+b]++;
}
}
int ans=0;
for(auto c:nums3){
for(auto d:nums4){
if(umap.count(0-(c+d))){
ans+=umap[0-(c+d)];
}
}
}
return ans;
}
};
LC383 赎金信
之前好像做过。思路比较简单,用哈希表来记录magazine里面的字符以及数量,ransomNote中出现不同字符或者数量不够就false。
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
unordered_map<char,int> umap;
for(auto c:magazine){
umap[c]++;
}
for(auto c:ransomNote){
if(umap.count(c) && umap[c]>0){
umap[c]--;
}
else{
return false;
}
}
return true;
}
};