本周总结
本周学习内容
这一整个星期都在刷算法学习视频,基本上算是把我从前学的算法知识点都给复习了一遍,也新学了一些东西,比如:
贪心常见的问题(思路简单,证明困难):
区间选点/最大不相交区间:将区间按照右端点进行排序,然后依次比较本区间右端点和下一区间左端点,更新右端点。
区间分组:将区间按照左端点进行排序,从前往后处理每个区间,判断能否将其放到已有区间,若无法放到已有区间,则新开一个区间。
区间覆盖:将区间按照左端点进行排序,依次枚举区间,选择右端点最大的区间并将目标区间的左端点更新为该右端点。
合并果子:构造哈夫曼树,使权重最大的果子距离根节点最近。
还有字符串子串匹配问题(KMP),实际上是对暴力匹配的优化,将字串自身的重复部分预处理出来,然后减少暴力匹配中无效的匹配步骤,模板如下:
// s[]是长文本,p[]是模式串,n是s的长度,m是p的长度
//求模式串的Next数组:
for (int i = 2, j = 0; i <= m; i ++ ){
while (j && p[i] != p[j + 1]) j = ne[j];
if (p[i] == p[j + 1]) j ++ ;
ne[i] = j;
}
// 匹配
for (int i = 1, j = 0; i <= n; i ++ ){
while (j && s[i] != p[j + 1]) j = ne[j];
if (s[i] == p[j + 1]) j ++ ;
if (j == m){
j = ne[j];
}
}
本周心态
因为蓝桥杯吧,还是比较焦虑的,感觉自己啥都不会,然后又捐款一次报名费……
本周就是主要复习思路重点,下周要干的事就是记常见函数,常见模板,刷刷题,补补题