刷算法题:
第一遍:1.看5分钟,没思路看题解
2.通过题解改进自己的解法,并且要写每行的注释以及自己的思路。
3.思考自己做到了题解的哪一步,下次怎么才能做对(总结方法)
4.整理到自己的自媒体平台。
5.再刷重复的类似的题目,根据时间和任务安排刷哪几个板块
6.用c++语言 都刷过一遍了 就刷中等
一.题目
某套连招动作记作仅由小写字母组成的序列 arr,其中 arr[i] 第 i 个招式的名字。请返回第一个只出现一次的招式名称,如不存在请返回空格。
示例 1:
输入:arr = "abbccdeff"
输出:'a'
示例 2:
输入:arr = "ccdd"
输出:' '
限制:
0 <= arr.length <= 50000
二、反思
1.自己的解法
class Solution {
public:
char dismantlingAction(string arr) {
unordered_map <char,bool> hmap;
for(char c : arr){
//把值传给hmap[c],如果找到了,传入的值是false,没找到是就是true;
//因为hmap.find(c),如果找到了,会传入这个key的映射迭代器,没找到就会传入.end()
hmap[c] = hmap.find(c) == hmap.end();
}
for(char c :arr){
if(hmap[c]){
return c;
}
}
return ' ';
}
};
2.题目的解法
class Solution {
public:
char dismantlingAction(string arr) {
vector<char> keys;
unordered_map<char, bool> hmap;
for(char c : arr) {
if(hmap.find(c) == hmap.end())
keys.push_back(c);
hmap[c] = hmap.find(c) == hmap.end();
}
for(char c : keys) {
if(hmap[c]) return c;
}
return ' ';
}
};
作者:Krahets
链接:https://leetcode.cn/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/solutions/159489/mian-shi-ti-50-di-yi-ge-zhi-chu-xian-yi-ci-de-zi-3/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
3.思路的异同
我的是无序表的使用,官方的是有序表的使用。
三.进步的地方
1.储存的是键值对,有可以排序和不能排序的版本。
2.map中通过键值访问单个元素的速度通常比unordered_map容器慢,(一段范围的话是map更快)但map允许根据顺序对元素进行直接迭代(即对map中的元素进行迭代时,可以得到一个有序的序列)。
3.map:内部用红黑树实现,具有自动排序(按键从小到大)功能。unordered_map:内部用哈希表( 哈希表拥有去重的能力的)实现,内部元素无序杂乱。
4.multimap:键可以重复,即一个键对应多个值