Leetcode454.四数相加2
有收获点
1.刚开始看到这题是就想了是不是可以分而治之,看到解释确实也是这样
2.又是哈希表的使用
教程解法思路
首先暴力破解的话时间复杂度是o(n4),时间复杂度太大了
所以后面只要找到比这个更低的,都算优化了算法
那么这样想的话,n2的时间复杂度也是可以接受的
那就分开,分成两组,一组先出和,以及和出现的次数,放入map中,另一组用于循环检查。这个思想和两数之和十分相似。。。。
Leetcode383赎金信
碰壁点
1.根据教程使用哈希表处理时,是将第一个字符串映射到数组中了,写到一半发现没有合适的判断依据判断第二个数组符合要求
2.看后续教程发现,将第二个数组映射到数组中,去遍历第一个数组,这个可以有简便的判别方式。
代码
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
unordered_map<char,int> map;
for(int i = 0; i < magazine.size(); i++){
if(map.find(magazine.at(i)) == map.end()){
map.insert({magazine[i],1});
}
else{//map中已经存在这个字符,让map中存储的这个字符数量加1
map[magazine[i]]++;
}
}
//
for(int i = 0; i < ransomNote.size(); i++){
auto iter = map.find(ransomNote[i]);
if(iter != map.end()){
map[ransomNote[i]]--;
}
else{//没找到
return false;
}
}
for(int i = 0; i < map.size(); i++){
if(map[ransomNote[i]] < 0){
return false;
}
}
//
return true;
}
};