理解思想+背诵
一、基础算法
排序
二分_禊月初三的博客-CSDN博客
高精度
前缀和与差分前缀和&差分_禊月初三的博客-CSDN博客
双指针算法,位运算,离散化,区间合并
二、数据结构
顺序表与链表
栈与队列-禊月初三-CSDN博客
二叉树&堆二叉搜索树
AVL树、红黑树
kmp
KMP-字符串查找算法-CSDN博客
Trie并查集_禊月初三-CSDN博客
Hash表
三、搜索与图论
DFS与BFS
DFS与BFS_禊月初三-CSDN博客
树与图的遍历:拓扑排序拓扑排序_禊月初三-CSDN博客
最短路最短路算法_禊月初三-CSDN博客
最小生成树最小生成树_禊月初三-CSDN博客
二分图:染色法、匈牙利算法
四、数学知识
质数、约数
质数、约数_禊月初三-CSDN博客
欧拉函数、快速幂、扩展欧几里得算法、中国剩余定理欧拉函数、快速幂、扩展欧几里得算法、中国剩余定理-CSDN博客
高斯消元、组合计数高斯消元、组合计数-CSDN博客
容斥原理、简单博弈论
五、动态规划
六、贪心
七、积累
在算法竞赛中,我们常常需要用到设置一个常量用来代表“无穷大”。
比如对于int类型的数,有的人会采用INT_MAX,即0x7fffffff作为无穷大。但是以INT_MAX为无穷大常常面临一个问题,即加一个其他的数会溢出。而这种情况在动态规划,或者其他一些递推的算法中常常出现,很有可能导致算法出问题。
所以在算法竞赛中,我们常采用0x3f3f3f3f来作为无穷大。
0x3f3f3f3f主要有如下好处:0x3f3f3f3f的十进制为1061109567,和INT_MAX一个数量级,即10^9数量级,而一般场合下的数据都是小于10^9的。
0x3f3f3f3f * 2 = 2122219134,无穷大相加依然不会溢出。
可以使用memset(array, 0x3f, sizeof(array))来为数组设初值为0x3f3f3f3f,因为这个数的每个字节都是0x3f。