![](https://img-blog.csdnimg.cn/20190927151101105.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 75
包含基础算法,数据结构,搜索与图论,数学知识,动态规划,贪心六大模块,介绍各个算法的思想以及代码实现,介绍过程中会结合实例进行解释。
黒猫.
这个作者很懒,什么都没留下…
展开
-
双指针算法,位运算,离散化和区间合并
双指针算法常用模板i原创 2022-07-17 17:53:16 · 213 阅读 · 0 评论 -
双栈实现表达式求值
当栈顶符号是"(“,并且栈外符号是”)"时,符号栈出栈,栈外指针右移;第5个字符是“)”,栈顶为”+“, > ,取出两个操作数和一个操作符,计算到”(“;题目保证符号 - 只作为减号出现,不会作为负号出现,例如,-1+2,(2+2)此时栈顶为”(”,栈外是")“,出栈,并且将指向”)“的指针右移;栈顶为”(“,“)”;4入栈,“+“出栈;第十个符号是“1”,入栈;第四个字符是“2”入栈,原创 2022-10-28 17:22:01 · 302 阅读 · 0 评论 -
《剑指offer22.链表中环的入口结点》
然后当两个指针相遇之后,让慢指针回到起点a,快指针位置不变,之后让两个指针每次都只走一步,由于两个指针距离入口b有相同的距离,所以最后会在入口处相遇;假设a到b的距离为x,第一次相遇距离入口b的距离为y,相遇的点为c,c到b的距离为z,因为快指针走的更快,所以快慢指针在c点第一次相遇时,快指针必定已经走了n圈(n>=1)之后又走了y距离到达c;那么此时让慢指针回到起点a,快指针仍然在c的位置,此时他们两个距离入口b的距离都是x,那么同时以相同的速度出发,最后就会在入口b处相遇;此时就找到了环的入口结点;原创 2022-10-12 11:26:08 · 143 阅读 · 0 评论 -
《剑指offer》19.二叉树中的下一个结点
比如说当前结点是D结点,D结点没有右子树了,那么D结点的父节点C是第一个是其父亲结点F的左儿子的结点,则结点C的父节点就是结点D的后继结点(因为结点D是当前F结点的左子树中的最后一个结点,根据左根右,下一个是根也就是F结点);2.他没有右节点,那么他的后继结点就是他的父节点中第一个是其父节点的左儿子的结点的父节点;1.他有右节点,那么他的后继结点就是他的右子树中最左下的结点,因为最左下的结点位置必定在他右子树的左儿子当中所以。给定一棵二叉树的其中一个节点,请找出中序遍历序列的下一个节点。原创 2022-09-22 15:15:13 · 41 阅读 · 0 评论 -
《剑指offer》07.重建二叉树
k表示左子树区间的长度,这时你可能会问,为什么没有求右子树区间的长度,这是因为右子树区间的长度通过总长度减去左子树的长度再减一就可以得到了,_pre[pl]表示前序遍历的起始位置,而前序遍历的起始位置就表示树的根节点,通过哈希表找到根节点在中序遍历中的位置,pos[_pre[pl]]再减去中序遍历的起始位置il,就得到左子树的长度:样例中的[9]长度是1,左子树是从前序遍历的根节点的下一个位置(因为构建下一颗子树时不包含上一颗的根节点)其余同理,递归构建即可;比如:前序遍历:[3,9,20,15,7];原创 2022-09-21 17:21:18 · 115 阅读 · 0 评论 -
整数二分与浮点数二分
题目分析:首先要根据时间复杂度进行分析,题目给定的最大的数字是N=5*10。原创 2022-09-06 16:55:18 · 94 阅读 · 0 评论 -
快速排序与归并排序
然后继续移动指针i,j向刚才那样,(因为这时i指向的数字又是=x的了所以可以继续移动),直到指针i,j相遇为止,此时指针左边的所有数字=x;同理,j指向的数字如果是>=x的,不用操作,让j指针向左边移动直到遇到q[i]x理应放到右边,而j指向的数字原创 2022-09-04 08:25:53 · 103 阅读 · 0 评论 -
完全背包问题
完全背包问题是在01背包问题上进行扩展:一件物品不仅可以取0,或1次,还可以取2,3…次,没有限制,求解在背包总体为V 的情况下所获得的物品的最大价值。最后我们可以将f像在01背包问题中分析的那样,给他去掉一维,并且由于这个f[i,j-v]+w就是在第i层的,所以我们不需要将j从m开始倒转。原创 2022-09-02 15:57:06 · 58 阅读 · 0 评论 -
快速幂(反复平方法)
快速幂算法能帮我们算出指数非常大的幂,传统的求幂算法之所以时间复杂度非常高(为O(指数n)),就是因为当指数n非常大的时候,需要执行的循环操作次数也非常大。=a的2的0次方*a的2的2次方,由于数字k的二进制数字只有logk位,所以快速幂可以将时间复杂度优化到O(logK);二进制向右移位,就是比如把1101变成:110(实际上就是/2;进行拆解,将k转为二进制数字,比如说a^5%p取模,如果使用朴素做法直接做的话,时间复杂度为O(K);,而k给定的范围是2*10。取二进制数字的个位:k&1。...原创 2022-09-01 11:48:07 · 233 阅读 · 0 评论 -
01背包问题
什么是动态规划?动态规划(英语:Dynamic programming,简称 DP),是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。以上定义来自维基百科,看定义感觉还是有点抽象。简单来说,动态规划其实就是,给定一个问题,我们把它拆成一个个子问题,直到子问题可以直接解决。然后呢,把子问题答案保存起来,以减少重复计算。再根据子问题答案反推,得出原问题解的一种方法。...原创 2022-08-31 22:00:10 · 83 阅读 · 0 评论 -
队列的实现与双端循环队列
初始化是将hh=0,tt=-1加入元素是想队尾加入q[++tt]=x;判空:hhtt为空判满:hh-tt=k?原创 2022-08-26 22:37:04 · 199 阅读 · 0 评论 -
Trie树与最大异或对的处理
所以可以对内层循环进行优化:我们知道异或是按照二进制数字进行不进位加法,所以如果要使得a[i] xor k的结果最大,k应该尽可能满足从最高位开始,与a[i]的每一位的数字不相同,这样的话,不同数字异或的结果是1,一定比相同数字异或的结果大,而且又是从最高位开始寻找,所以找到后a[i] xor k的值一定是最大的。son[N][26];//son[N][26]存储的是所有点的26个儿子结点的下标,比如son[1][3]=k存储的就是第一层编号为1的结点的儿子’c’的编号为K。拓展题:求最大抑或对。原创 2022-08-23 18:09:24 · 137 阅读 · 0 评论 -
最短路问题,最小生成树,二分图判定与匈牙利算法
最短路问题分两大类:单元最短路问题,从一个点出发到其他各个点的最短路径,多源汇最短路屋问题,找出任意两个点之间的最短路径。原创 2022-08-19 22:58:09 · 285 阅读 · 0 评论 -
树与图的深度优先遍历和广度优先遍历
根据题意,是在这棵树中,去掉某一个结点之后,剩余的所有连通块中最大的连通块中点的数量,而我们要求的是在这些所有结点中最小的。也就是最小的最大连通块中点的数量。原创 2022-08-14 08:57:06 · 488 阅读 · 0 评论 -
前缀和与子矩阵的和
前缀和是指某序列的前n项和,可以把它理解为数学上的数列的前n项和,而差分可以看成前缀和的逆运算。合理的使用前缀和与差分,可以将某些复杂的问题简单化。题目输入一个长度为n的整数序列。接下来再输入m个询问,每个询问输入一对l,r。对于每个询问,输出原序列中从第l个数到第r个数的和。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数数列。接下来m行,每行包含两个整数l和r,表示一个询问的区间范围。输出格式共m行,每行输出一个询问的结果。...原创 2022-07-15 08:04:23 · 118 阅读 · 0 评论 -
差分与差分矩阵
定义差分与前缀和相反,给定一系列数a1,a2,a3…an,构造b1,b2,b3…bn使得对于任意的ai,有ai=b1+b2+b3+…+bi,即为a数组是b数组的前缀和,则b数组是a数组的差分,差分的构造方式b1=a1;b2=a2-a1;b3=a3-a3;…bi=bi-bi-1;作用。...原创 2022-07-15 11:29:09 · 470 阅读 · 0 评论 -
高精度加减乘除运算
高精度计算原创 2022-07-14 10:03:30 · 287 阅读 · 0 评论