一.学习内容
1.哈希
(1)字符统计(蓝桥云课)
重点分析:
1.(16)哈希下标索引,由题目要求得到。如题目要求大写字母,所以就在A-Z查找。不用整个哈希表遍历。
2.(16-28)查找最大次数:只要次数一旦大于maxcnt就重新将ret数组从下标0开始计算,同时将maxcnt更新为该次数,如果再次出现该次数就将其插入在后面。
3.(13,29)为什么用char数组不用string:29行我们将ret[idx]赋值为'\0',由于可能出现在较靠前字符出现大量次数相同这种情况,即ret[idx]即后面可能存在字符,通过'\0‘将其切割,便于cout。
(2)字符串统计
分析:
1.(16)unordered_map内含有直接统计键的个数函数size()。
2.at(key)可以获取value,find(key)查找以key为键的键值对,找到则返回一个迭代器。通常与end()来判断是否键值对存在,hash.find(key)!=hash.end()。
(3)优质数对
分析:
1.首先排除两层for循环 做法。最初想的是把用两个hash表将下标存入,想固定一个变量,通过A[hash1[i]]==B[hash2[i]]去判断,想的太简单了,数字会重复出现。然后看了下别人做的,他们称这种方法为“状态压缩”,我的理解是:首先从优质数对的共性出发,他们的和相等,但是在小数字范围内和相等的情况太多,比如4=1+3=2+2,所以将其中某个数字扩大合适的倍数(扩大优质数对里面同一个值),让其和唯一性,通过该性质来确定。
2.(22-28)ret那里通过配对这种累加计算来累加,1+2+3+4......,h[x]为0时先让h[x]++,单个无法配对。
2.贪心
(1)分开元音字母
分析:
1.(6)不能写成a=='a'||'b'||'c'......
2.(15-29)cnt从0开始,cnt>1,ret+=")(",因为分割是从遍历到'('后第二个元音字母开始。由于第一个元音前没有元音,所以cnt从0开始。
3.(12,20)通过flag来判断某一条件是否成立。
3.前缀和
感觉就是跟高中学的数列求和差不多,不过数组里面的数是没规律的,但是还是满足Sn-Sn-1=an。
(1)一维数组的动态和
分析:
1.前缀和的模板。
(2)找到数组的中间位置
分析:
1.(14)可以用三目运算符减少if条件。
二.总结反思
目前处于初学阶段,题目考虑不够全面,特殊情况会忽略。基础知识遗忘。