题目
初见思路
42.有效的字母异位词
比较简单的一道题,注意,使用record[s[i] - 'a']
这里减‘a’是为了让index从0开始。
1002.查找常用字符
一开始使用的unoreder_set,无法识别多个相同字母交集,如["bella","label","roller"]
结果应该是["l","l","e"]
我的结果确是["l","e"]
。
349. 两个数组的交集
使用两个unordered_set,一个储存结果,一个存放nums1。用set.find来找nums1和nums2相同的数,insert进如储存结果的set(set不会储存重复的key)。
202. 快乐数
用取模的方式来计算sum,但不知道在没有1的情况下这么退出循环。
1. 两数之和
想到了用unordered_map,key储存数组的值,value储存数组的index。在一个for loop中查找是否有减掉target后相同的值,没有就插入map,有就返回。但有些测试过不了。
更新思路
42.有效的字母异位词
使用record[s[i] - 'a']
这里减‘a’是为了让index从0开始。a-z 编码是连续的。
1002.查找常用字符
看了代码随想录后还是想尝试一下使用set 或者 map。于是使用unordered_map,这样可以统计重复common letter出现的次数。首先用第一个string来初始化一下map,然后在一个for loop中(长度为words的长度,从i=1开始)创建一个tempMap,并用words[i]
来进行初始化。然后在loop中比较commonMap(计算的前一个string)和tempMap(计算的当前string)中每个字母的出现次数。没有出现的话,这个字母在commonMap(key都是第一个string的字母)中的count就是0,出现了也要取最小的count(防止这种情况的结果出现两个o
, ["cool","lock","cook"]
)。然后转化为vector:
vector<string> commonChars(vector<string>& words) {
unordered_map<char, int> commonMap;
// init map with first string's letter
for(char c : words[0]) {
commonMap[c]++;
}
// For each remaining word
for(int i = 1; i < words.size(); ++i){
unordered_map<char, int> tempMap;
for(char c : words[i]) {
tempMap[c]++;
}
// Update commonMap to hold the minimum count of each character
for(auto& [ch, count] : commonMap) {
if(tempMap.count(ch)) {
count = min(count, tempMap[ch]);
} else {
count = 0;
}
}
}
vector<string> res;
for (auto& pair : commonMap) {
for(int i = 0; i < pair.second; i++) {
res.push_back(string(1, pair.first));
}
}
return res;
}
349. 两个数组的交集
c++中可以用iterator来初始化各种容器。如:unordered_set<int> set1(nums1.begin(), nums1.end());
, vector<int>(res.begin(), res.end())
202. 快乐数
if(sums.find(sum) != sums.end()){
return false;
} else {
sums.insert(sum);
}
用一个set来保存所有sum,当遇到重复的时证明已经进入一个cycle了,不会出现1了。在一个while loop中,有1就return true,有重复就false。
while(true){
int sum = getSum(n);
if(sum== 1) return true;
if(sums.find(sum) != sums.end()){
return false;
} else {
sums.insert(sum);
}
n = sum;
}
1. 两数之和
有些测试过不了的原因是用成了nums[i]-target
, 应该用target去减,因为那两个数肯定比target小或者相等。
今日总结
学习时长
4h
收获
开始熟悉哈希了