454 四数相加2
题目
思考
使用unordered map存放前两个数组,key为合,value为该合出现的次数。时间复杂度为O(n2)
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
// unordered map key: 前两个数组中值相加之和, value:该和值出现的次数
// 时间复杂度O(n2)
unordered_map<int, int> um;
int result = 0;
for(int i = 0; i < nums1.size(); i++) {
for(int j = 0; j < nums2.size(); j++) {
if(um.find(nums1[i] + nums2[j]) != um.end()) {
um[nums1[i] + nums2[j]]++;
} else {
um[nums1[i] + nums2[j]] = 1;
}
}
}
for(int i = 0; i < nums3.size(); i++) {
for(int j = 0; j < nums4.size(); j++) {
if(um.find(0 - nums3[i] - nums4[j]) != um.end()) {
result += um[0 - nums3[i] - nums4[j]];
}
}
}
return result;
}
};
383 赎金信
思路
将ransNote中的char转换成multiset,便利magazine,从ms中删除对应的元素
注意
C++ ms.erase(‘a’) 会把 ms中所有和 'a’ 相等的元素都删除掉
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
multiset<char> ms;
for(int i = 0; i < ransomNote.length(); i++) {
ms.insert(ransomNote[i]);
}
for(int j = 0; j < magazine.length(); j++) {
if(ms.count(magazine[j])) {
auto it = ms.find(magazine[j]);
ms.erase(it);
}
}
return ms.empty();
}
};