
算法数据结构模板
文章平均质量分 75
Ben土豆
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
[模版总结] - 字符串哈希robin-karp算法
常规情况下,比较两个字符串是否相同,是通过遍历两个字符串进行逐字节比较,时间复杂度为OLOL, 在频繁比较时会很慢,字符串哈希算法是采用将字符串逐位转化为数字,这样可以计算任意区间的substring,并在O1O1时间内完成比较。nums×P3t×P2a×Prnums×P3t×P2a×PrHash函数为fstring∑i1lsi−1×Pi−1fstring∑i1ls。原创 2024-12-24 15:35:39 · 1084 阅读 · 0 评论 -
[模版总结] - 树的基本算法3 - 结构转化
将二叉树以前序遍历的顺序转化成连接结构,要求in-place即不占用额外空间存储新的链表结构。注:这类题目最基本的解题思路是利用递归分治 (也可以使用迭代方法),在构建树结构的时候,我们通常会使用前序遍历的思路自上而下,进行建树,每一次递归中,得到左右子树的值进行连接。上面两道题目的合并版,比起使用上述括号形式进行序列化编码,这道题目我们可以对于序列化的格式进行简化,对于缺失的左右叶子结点我们用NULL来表示,每一个结点以逗号隔开。例子:[1,2,3,4] -> "1(2(4))(3)"原创 2023-11-16 12:24:39 · 202 阅读 · 0 评论 -
[模版总结] - 树的基本算法4 -最近公共祖先 LCA
LCA:在一个树中,距离两个节点p,q最近可以是其本身并且同时包含这两个子节点的节点。原创 2024-11-22 17:34:28 · 1052 阅读 · 0 评论 -
[模板总结] - 单向链表LinkedList操作
Leetcode。原创 2024-11-16 16:39:22 · 1090 阅读 · 1 评论 -
[模版总结] - 树的基本算法1 - 遍历 & 迭代器
二叉树基础总结,遍历篇原创 2023-11-10 10:08:58 · 170 阅读 · 0 评论 -
[模板总结] - 拓扑排序
有向图邻接表和入度计算完成后,即可使用类似BFS方法进行遍历,创建一个队列进行存储,如果有节点入度为0那么就将该节点加入队列,然后找出与该节点相邻节点并将他们的入度-1,如果有新的入度为0的点出现继续加入队列直到为空为止。注:如果是有环形结构,那么你在拓扑排序可能会出现死循环,因为环形结构两个节点会不断进入队列。但也可以解决,可以设置一个阈值,如果加入队列节点个数超过了图中节点个数说明环形存在,即刻跳出。中以图中节点依赖关系对节点进行排序。1. 入度:每一个节点的入度可以理解为指向这个节点的节点个数。原创 2023-07-11 15:46:30 · 169 阅读 · 0 评论 -
[模板总结] - 二分查找
模板题目链接Leetcode 34. Find First and Last Position of Target:二分法最重要的两个模板,一个找满足条件的第一个值,一个是找满足条件的最后一个值。二分查找思路Binary Search可以通过递归和迭代两种方式实现,这里介绍迭代写法。二分查找首先前提是数组有序,并且是能够通过条件将结果分成两部分 —— 满足或者不满足。二分查找的应用归根到底就是两种:找满足条件的第一个值 基本思路:每一次循环选择当前区间中点,如果,指针向中点及其左边...原创 2022-02-24 12:54:52 · 280 阅读 · 0 评论 -
[模板总结] - 归并排序思想
模板题目链接Lintcode 454. Sort Array:归并排序Leetcode 23. Merge K sort-lists:K路归并问题归并排序思路归并思路很好理解,以两个数组归并来举例,开一个新数组来保存新的合并结果,两个原始数组(需要保证两个原始数组有序)从头开始比较,哪个比较小就加入合并数组中,最后就是排序后结果。对于归并排序问题,由于原始数组非有序,所以需要利用分治思想将原始数组分解到有序数组,也就是单一元素数组自身是有序,通过合并小问题来最终解决两个原始数组合...原创 2022-02-24 11:56:27 · 941 阅读 · 0 评论 -
[模板总结] - 双指针
题目描述 & 链接LintCode 228. 链表中点-同向双指针LintCode 31. Partition Array-相向双指针LintCode 200. Longest Palindromic Substring-背向双指针具体思路1.同向双指针同向双指针通常解题思路就是一个主指针,一个辅助指针,主指针每次循环中一般走一步,每一次循环中辅助指针不断向前扫描,典型同向双指针:快慢针找某个位置 KMP算法扫描的过程也类似同向双指针 归并排序快...原创 2022-02-24 08:14:01 · 511 阅读 · 0 评论 -
[模板总结] - 二叉搜索树 BST - 基础篇
模板题目链接BST查找 -Leetcode 270. Closest BST Value BST插入 -Leetcode 701. Insert Node in BST BST删除 -Leetcode 450. Delete Node in BST二叉搜索树-BST 概述BST是二叉树的一种,具备二叉树的结构性质:只有一个Root节点,每一个节点最多可以有左右两个子节点。BST自身的性质:每一个节点的左儿子数值一定比他小,右儿子的数值一定比他大。这个性质也使得BST的中序遍历输出结果是一...原创 2022-02-14 01:32:12 · 432 阅读 · 0 评论 -
[模板总结] - Dijkstra 最短路径求解
模板题链接Leetcode 743. 网络延迟时间经典练习题787. Cheapest Flights Within K Stops1928. Minimum Cost to Reach Destination in TimeDijkstras算法介绍1. 最短路径算法概述在图论问题中最为经典问题之一就是求最短路径问题,今天我们主要来讨论单源点最短路径问题,求解最短路径问题首先我们需要理解问题中图的类型,通常来说构建图会有下面几种情况 无边权DAG: 也就是拓扑图,这种图的原创 2022-02-06 06:58:00 · 463 阅读 · 0 评论 -
[模板总结] - 单调栈
模板题&链接Leetcode 907. Sum of Subarray MinimumsLeetcode 901. Online Stock SpanLeetcode 496. Next Greater ElementLeetcode 503. Next Greater Element IILeetcode 739. Daily TemperaturesLeetcode 239. Sliding Window Maximum单调栈定义是指一个栈内保存的元素满足单调递增原创 2022-02-01 11:34:36 · 209 阅读 · 0 评论 -
[模板总结] - 快速选择 (霍尔Quick Selection)
模板题目 & 链接Leetcode 215 Kth Largest Element 第K大的元素Leetcode 347. Top K Frequent Elements TopK高频元素基本思路:快速选择是快速排序算法的衍生品,当对数组进行partition分组时,实际上就是将比pivot大或者小的分成一组,加入pivot数组在整个数组中是第K大的元素,那么partition后pivot之前就是前K-1大的元素集合,只是顺序不确定。根据这个快速排序partition的性质,可以引出原创 2022-01-31 12:37:56 · 624 阅读 · 0 评论 -
[模板总结] - 快速排序
模板题&链接Leetcode 912 - 数组排序快速排序思路和归并排序的思想,我们也是通过分治法来实现从局部有序最后全局有序,但是与归并排序不同的是,归并排序先分治出最小子问题(两个单一元素数组归并),先得到最小子问题合并结果然后往上层返回,得到最后合并结果。快速排序分治思路是先通过pivot - 当前数组中一个值作为标杆,将大于放到一边,小于放到一边,我们成为partition, 然后在分治到子问题,将左右两部分继续进行partition。当到达最小子问题时,数组已经是有序。原创 2022-01-31 12:17:04 · 408 阅读 · 0 评论