Leetcode刷题常见知识点

并查集:解决元素分组问题(亲戚、村村通) 

    优化:压缩路径和按秩合并

    find

    merge

 

双指针

    环形链表 追及问题

    两数之和/三数之和

 

二叉搜索树BST 左子树节点值小于根节点,右子树大于根节点

平衡二叉树 左子树节点值小于根节点,右子树大于根节点,且左子树与右子树高度差不超过1

 

python数据结构参考:https://blog.youkuaiyun.com/SHOUGOUGOU/article/details/107571011

大顶堆 每个节点的值大于等于左右孩子节点

小顶堆 每个节点的值小于等于左右孩子节点

优先队列 

最小堆 完全二叉树,小顶堆

最大堆 

哈夫曼编码 压缩编码,带权路径最小。用最小堆实现,1)每次取权值最小的两个节点,构建二叉树节点,2)把相加后的权值放入堆,3)重复第一步操作

LRU缓存 缓存算法的一种,如果数据在一段时间内使用次数很少,那么将来一段时间内被使用的可能性也很小。支持get(key)和put(key)操作。python借助Ordereddict实现,java借助LinkedHashMap实现。双向链表加哈希表可实现get、put、删除最早节点的O(1)操作。

LFU缓存 最不常使用缓存设计,平衡二叉树+哈希表。java TreeSet

 

DP

最长公共子序列

最长公共子串

最长子序列的和

    动态规划:max(d[i-1]+num[i], num[i])

 

回溯算法 (通过剪枝减少时间复杂度)

    八皇后,01背包,全排列

 

DFS 深度优先搜索,后进先出,用栈辅助,用到递归和回溯

BFS 广度优先搜索,最短路径,用队列辅助

 

最小生成树:连通网的生成树中,所有边的代价和最小

    Prime: 加点法 ,MST性质应用,每次迭代选择代价最小的点,时间复杂度O(n*n),适合边稠密的网,U, V

    Kruskal: 加边法,每次迭代选择满足条件的最小代价边。可以用并查集判断所选边的两个顶点是否属于两颗树,即是否形成环。时间复杂度O(e*loge),适合边稀疏的网

 

图最短路径  Dijkstra

a.初始时,S只包含源点,即S={v},v的距离为0。U包含除v外的其他顶点,即:U={其余顶点},若v与U中顶点u有边,则{u,v}正常有权值,若u不是v的出边邻接点,则{u,v}权值为∞。

b.从U中选取一个距离v最小的顶点k,把k,加入S中(该选定的距离就是v到k的最短路径长度)。

c.以k为新考虑的中间点,修改U中各顶点的距离;若从源点v到顶点u的距离(经过顶点k)比原来距离(不经过顶点k)短,则修改顶点u的距离值,修改后的距离值的顶点k的距离加上边上的权。

d.重复步骤b和c直到所有顶点都包含在S中。

 

待更新:

字典树

拓扑排序

KMP

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值