- BinaryTree(二叉树)
- Graph(图)
- HashTable(哈希表)
- Heap(堆)
- MST(最小生成树)
- SegmentTree(线段树)
- ShortestPath(最短路径算法)
- Sort(排序算法)
- Trie(前缀树)
- UnionFind(并查集)
-
树
满二叉树
完全二叉树(堆)
二分搜索树
平衡二叉树(AVL)
红黑树
-
字符串分割
-
最大公约数
-
进制转换
-
字符串整数转换
-
二叉树非递归遍历
-
二分搜索树删除任意一个节点
-
二叉树序列化和反序列化
-
树的构建
-
求平方根
牛顿迭代:时间复杂度
O(logn),空间复杂度O(1) -
求幂方
快速幂算法:时间复杂度
O(logn),空间复杂度O(1) -
质数计数
厄拉多塞筛法:时间复杂度
O(nloglogn),空间复杂度O(n) -
字节序判断
-
字符串函数简单实现
-
矩阵乘法的实现
-
左旋转字符串
-
组合公式
-
线程交叉打印值
-
反转链表
-
单调双向队列
滑动窗口的最值问题
-
单调栈
找出数组每个元素左右距离最近的比它大的数字
-
大小堆
-
双指针,窗口
和为Sum的连续正数序列(有序)
和为Sum的连续正数序列(无序)
-
快慢指针
判断链表是否有环
去除有序数组重复元素
-
并查集
-
Trie树
搜索引擎的搜索关键词提示功能
-
哈希链表
LRU缓存机制,时间复杂度
O(1) -
哈希表
word单词拼写检查功能
-
邻接表、邻接矩阵
-
布隆过滤器
-
跳表
-
线段树
-
堆
霍夫曼编码
-
索引堆
-
排序
冒泡排序、选择排序、插入排序
快速排序、归并排序、堆排序
桶排序、计数排序、基数排序
-
蓄水池抽样算法
-
抢红包算法
-
Knuth洗牌算法
-
等概率选取问题
-
二分查找
查找最左边界和最右边界
数字在排序数组中出现的次数
有序旋转数组最小值
有序旋转数组查找某个值
-
多数投票算法
数组中找出出现次数大于一半的数,时间复杂度
O(n),空间复杂度O(1) -
FloodFill算法
-
KMP算法
-
最小生成树
Prim算法
Kruskal算法
-
最短路径算法
Floyd算法
Dijsktra算法
Bellman-Ford算法
-
马拉车算法
最长回文子串,时间复杂度
O(n) -
Morris遍历
-
BFPRT算法
找出无序数组中最小的k个数
-
完美洗牌算法
-
广度优先搜索(BFS)和深度优先搜索(DFS)
拓扑排序
-
动态规划(递归 + 记忆化搜索),滚动数组优化空间复杂度
楼层扔鸡蛋问题
最长回文子串
Longest Increasing Subsequce
Longest Increasing Substring
Longest Common Subsequence
Longest Common Substring
背包类DP
区间类DP
匹配类DP:正则表达式匹配,最小编辑代价
博弈类DP
-
递归
汉诺塔问题
二叉树两个节点的最近公共祖先
反向打印链表
烧饼排序
-
迭代
约瑟夫问题
非递归归并
-
回溯
N皇后问题
全排列
第K个排列
下一个排列
组合,组合总和问题
子集
-
贪心
小区间覆盖大区间问题
区间问题
根据身高重建队列
买卖股票
-
位运算和位操作
快速得到二进制数最后一个1的位置:
n &= ~n+1整数中1的个数:时间复杂度只跟1的次数有关
加法实现