数据结构与算法
文章平均质量分 77
Lee贤
安静做事,成功了再说
展开
-
初阶二叉树的相关性质定理及题目练习
本文主要讲解了二叉树的相关性质定理的证明推导以及常考的经典题目原创 2023-06-03 10:58:19 · 529 阅读 · 0 评论 -
二叉树及其相关题目相关的功能的实现
本文主要讲解了二叉树的链式实现及其相关的功能实现原创 2023-05-27 20:19:01 · 614 阅读 · 0 评论 -
二叉树初阶和堆的详解
本文主要介绍了二叉树初阶预备知识和堆的原理,实现及其应用,内容较多但干货满满,希望能帮助到您原创 2023-05-24 18:07:04 · 699 阅读 · 0 评论 -
栈和队列的相关功能实现及其基础应用
本文主要讲解了栈和队列的功能实现以及其相关的基础应用原创 2023-05-16 17:42:18 · 1187 阅读 · 0 评论 -
单链表的成环问题
本文主要介绍了链表的成环类的两个小问题原创 2023-05-13 22:27:58 · 524 阅读 · 0 评论 -
双向链表的功能实现
本文主要介绍了双向链表的原理及功能的实现原创 2023-05-12 18:32:34 · 734 阅读 · 0 评论 -
表达式求值问题-双栈模板化实现
本文主要介绍了模板性质的表达式求值计算的问题原创 2023-05-10 17:47:17 · 725 阅读 · 0 评论 -
详解时间复杂度和空间复杂度问题
本文主要结合实例讲解了常见的时间复杂和空间复杂度的分析原创 2023-04-28 20:50:17 · 1649 阅读 · 0 评论 -
数组模拟实现单链表快速操作
本文主要讲解了数组模拟链表的功能实现,并给出相关代码参考原创 2023-04-22 21:13:31 · 792 阅读 · 1 评论 -
单链表中二级指针的使用以及单链表的增删查改操作
本文主要介绍了链表带头节点和不带头节点的两种方式的基本介绍和实现及二级指针的用法原理原创 2023-04-21 20:59:47 · 1203 阅读 · 0 评论 -
整数二分从入门到精通
本文意在帮助我们彻底摆脱二分死循环问题,总结模板应对问题原创 2023-04-13 17:33:45 · 475 阅读 · 2 评论 -
逆序对问题的两种求解思路(归并排序和树状数组)
本文讲解了逆序对问题的两种标准求解方法原创 2023-04-11 16:45:32 · 1860 阅读 · 2 评论 -
蓝桥杯2022----修剪灌木
大体方向一看,又是一道不涉及算法的题目,仅凭借数学思维就能做,但是俺数学不好啊,咋办,那就来找规律呗,还能咋办?原创 2023-04-06 15:55:50 · 433 阅读 · 2 评论 -
动态规划入门
本文主要讲解动态规划问题的入门知识和经典例题原创 2023-03-31 22:29:30 · 993 阅读 · 0 评论 -
归并排序中的逆序对问题和前后缀和的用法
归并函数与逆序对问题原创 2023-03-19 22:23:27 · 269 阅读 · 0 评论 -
dfs和bfs在求解最优解问题上的互通与差异
题目还是比较简单的,就是要我们在尽可能少的步骤下,从起点到达目的地,首先,我们要明确,最优路线一定是不能重复经过某个点的,也就是说,我们可以通过设置已访问数组来达到剪枝优化算法时间的效果,我们就从起点出发,搜索每一种可能得走法,并且每走一步就判断当前是否已经到达终点,注意,此时我们的判断就是基于最优视角判断的,同时出发搜索,谁先到达终点,谁就是最优解。接着我们来分析bfs和dfs两者在求解同一个问题上的差异。原创 2023-03-16 18:01:07 · 163 阅读 · 0 评论 -
离散化的初阶应用
给出一列数字,在有些情况下,我们只需要知道这些数的相对大小,而不关心这些数字的绝对大小,比如,对一个班级的学生成绩进行排名,我们最终只要排名就可以,不需要关心其成绩的绝对值。“离散化”就是用数字的相对值代替它们的绝对值。离散化是一种数据处理技巧,它把分布广泛的数据转换为密集分布,从而能够让算法更快,更省空间地处理。离散化的步骤如下:1.排序,首先对数组元素排序,这样我们才能确定相对大小。2.离散化,把排序后的元素从1开始逐个分配数值,完成离散化。3.归位,把离散化的每个元素放回到原始位置,结束。原创 2023-03-14 22:22:36 · 217 阅读 · 0 评论 -
抓住那头牛(dfs和bfs应用)
深度搜:我们可以通过将终点k逐步减为不大于n的数来达到递归条件结束的目的,而对于k来说,如果是偶数,那么它一定是k/2的点移动过来的或者是从n点直接一个点一个点地移动过来的,只有这两种情况用时最少,我们就取这两种情况的最小值再次进入递归计算k/2的情况即可,而对于k是奇数的话,只有两种情况,要么从k+1移动-1到k,要么从k-1移动1到k,我们再取这两者的最小值带入递归再次计算,当k什么时候不大于n了,我们便有了确定的走法,就是向后走n-k步,从而完成递归过程。原创 2023-03-13 22:15:07 · 268 阅读 · 3 评论 -
二分法的原理及其应用举例
什么是二分法:最简单的例子就是类似于二分查找的用法来实现快速查找有序区间内的给定的目标值是否存在,当然,这也可以应用在别的问题中,二分查找是一个时间效率极高的算法,尤其是面对大量的数据时,其查找效率是极高,时间复杂度是log(n)。如果问题是单调的,且求解精确解的难度很高,可以考虑用二分法。主要思想就是不断的对半折叠,每次查找都能除去一半的数据量,直到最后将所有不符合条件的结果都去除,只剩下一个符合条件的结果。原创 2023-03-12 21:54:24 · 4274 阅读 · 0 评论 -
差分数组的简介与应用
所谓差分数组,就是利用数组相邻元素作差来保存在另一个新开辟的数组中,当我们对数组的任意一块连续的区间进行操作时,我们就可以只操作差分数组左边界和右边界加1的两处下标上的值,因为我们的差分数组就是在原数组相邻元素之差上实现的,在区间内的相同操作,只会影响差分数组边界的值,不会影响其内部的值,这样对于规模较大的数据,在进行连续区间操作时,我们可以通过操作差分数组的边界值,一次操作只改变两个值就可以实现目标,大大提高效率。原创 2023-03-12 11:59:57 · 575 阅读 · 0 评论 -
题目 2695: 蓝桥杯2022年第十三届决赛真题-出差
思路分析:这个题在思路上要注意:1.我们如何看待在每个城市需要隔离的时间,这里我用的是单独开辟的数组,其实也可以在创建邻接图时就将再下一个所到达的城市需要隔离的时间算在从起点到这条路的花费上,需要注意,开始的第一个点和最后的N城市不需要花费隔离时间,这一部分在计算时应该减去,剩下的就是普通的单元最短路径算法了。特别提醒,注意memset只能初始化数组为0或-1,否则就会初始化为随机值,我调试半天才调出来,我也是现在才知道这个事......原创 2023-03-09 21:14:43 · 282 阅读 · 4 评论 -
动态规划初阶-爬楼梯问题
动态规划算法是一个上限极高的算法,题型和考法多变,对于初学者来说不太有好,动态规划法最主要的就是得到状态方程,可能刚开始这些概念会比较陌生,我这里举个例子,我们都直到著名的斐波那切数列的递推公式:其实这个就是最简单的状态方程,一个位置上的状态,又=由上一个或者几个的状态来决定,这就是最基本的动态规划法的应用。动态规划,无非就是利用历史记录,来避免我们的重复计算。而这些历史记录,我们得需要一些变量来保存,一般是用一维数组或者二维数组来保存。原创 2023-02-28 14:33:25 · 240 阅读 · 0 评论 -
带头节点的单链表的就地逆置
本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数。原创 2023-02-12 00:04:22 · 1327 阅读 · 0 评论 -
位运算的介绍和简单应用
位运算的相关介绍和简单应用原创 2023-02-07 14:51:28 · 380 阅读 · 0 评论 -
最小生成树问题(Prim算法和Kruskal算法)
模板题,只不过这次在做的时候感觉又学到了些新的东西,之前都是数据结构里学的,因为用惯了C++,所以就想摆脱那些邻接数组之类的写法,用STL试一下,在其中把我遇到的一些问题写出来分享给大家原创 2023-01-31 20:34:26 · 510 阅读 · 0 评论 -
众数筛选法之 - Boyer-Moore 投票算法
在Boyer-Moore 投票算法中,遇到相同的数则将count 加 1,遇到不同的数则将count 减1。根据主要元素的定义,主要元素的出现次数大于其他元素的出现次数之和。因此在遍历过程中,主要元素和其他元素两两抵消,如果存在主要元素的话,最后一定剩下至少一个主要元素。原创 2023-01-13 22:14:13 · 157 阅读 · 0 评论 -
数字三角形(dfs超时了?dp来帮忙)
dfs超时代码的给出和dfs的适用条件与简析dp代码原创 2023-01-05 23:19:39 · 103 阅读 · 0 评论 -
递归法反转链表
BM3 链表中的节点每k个一组翻转原创 2022-12-25 21:59:08 · 314 阅读 · 0 评论 -
BC119 小乐乐与字符串
我们可以第一遍遍历字符c的个数设为a,在接着遍历一遍h的个数,注意此时每有一个h就会有a个ch组合,设此时遍历完ch个数为b,接着继续遍历n,此时每有一个n就会有b个chn组合,遍历完成后最后的个数就是答案,思路上难点就是,将目标子集拆分化处理,每一步都有至少上一步所找的字符串个数的新的子集(但前提是字符串中至少存在一组所有的目标子集所需的字符);”,哎,没办法,别人家的孩子牛啊,咱就得跟着学习,那现在就上思路吧。如“ABC”的子序列有“A”、“B”、“C”、“AB”、“AC”、“BC”、“ABC”。原创 2022-12-14 21:30:16 · 94 阅读 · 0 评论 -
BC117 小乐乐走台阶
小乐乐上课需要走n阶台阶,因为他腿比较长,所以每次可以选择走一阶或者走两阶,那么他一共有多少种走法?简单的递归回溯求解问题,学过数据结构的应该比较熟悉,还是建议没单独学过递归和数据结构的先跳过这道题。输入包含一个整数n (1 ≤ n ≤ 30)输出一个整数,即小乐乐可以走的方法数。原创 2022-12-14 15:27:12 · 42 阅读 · 0 评论 -
7-15 航空公司VIP客户查询(哈希表的链表实现)
不少航空公司都会提供优惠的会员服务,当某顾客飞行里程累积达到一定数量后,可以使用里程积分直接兑换奖励机票或奖励升舱等服务。现给定某航空公司全体会员的飞行记录,要求实现根据身份证号码快速查询会员里程积分的功能。输入首先给出两个正整数N(≤105)和K(≤500)。其中K是最低里程,即为照顾乘坐短程航班的会员,航空公司还会将航程低于K公里的航班也按K公里累积。随后N行,每行给出一条飞行记录。飞行记录的输入格式为:。其中身份证号码由17位数字加最后一位校验码组成,校验码的取值范围为0~9和x共11个符号;原创 2022-12-03 20:15:38 · 1075 阅读 · 0 评论 -
6-2 基数排序(链式实现)
/静态链表L的r域中记录已按(keys[0], …, keys[i-1])有序 //该函数按第i个关键字keys[i]建立RADIX个子表,使同一子表中记录的keys[i]相同。//f[0..RADIX-1]和e[0..RADIX-1]分别指向各子表中第一个和最后一个记录//该函数按keys[i]自小至大地将f[0..RADIX-1]所指各子表依次链接成一个链表 //e[0..RADIX-1]为各子表的尾指针。原创 2022-11-25 12:58:29 · 665 阅读 · 0 评论 -
几种排序方法的总结(插入,希尔,快排,归并)
说实话,以前的我用c++的sort用麻痹了,所以其他的排序方法基本都忘了,但是学了这些才发现,原来排序方法也可以有那摩多种,所以今天就来总结下我学习到的几种排序方法:原创 2022-11-22 21:06:55 · 110 阅读 · 0 评论 -
求图最短路径的方法(Dijkstra ,Floyd ,SPFA ,Bellman - ford)
Dijkstra算法重在解决给定源点(即出发点)的最短路径算法,主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。首先找到一个没有确定最短路且距离起点最近的点,并通过这个点将其他点的最短距离进行更新。每做一次这个步骤,都能确定一个点的最短路,所以需要重复此步骤 n 次,找出 n 个点的最短路。原创 2022-11-16 21:04:44 · 381 阅读 · 0 评论 -
7-1 最短路径之Floyd(重在原理而不在题目)
首先可以用邻接矩阵储存有向图,(若为非连通图再加判断条件即可),用一个二维数组如d[i][j]表示i到j的最短路径的长度距离,初始时先将邻接矩阵中能直接相邻的两个节点的距离权值赋值给d,接下来就要找出不是直接到达但是距离反而比直接到达的距离减少了的情况,对于每两个点来说,中间可能经过从1到n-2个点不等,算法实现是一个三重for循环,其中k为经过的中转点,i为起点,j为终点,通过比较d[i][j]和d[i][k]+d[k][j]的大小来更新d[i][j]的最小值,原创 2022-11-09 12:47:02 · 955 阅读 · 0 评论 -
7-12 社交网络图中结点的“重要性”计算
在社交网络中,个人或单位(结点)之间通过某些关系(边)联系起来。他们受到这些关系的影响,这种影响可以理解为网络中相互连接的结点之间蔓延的一种相互作用,可以增强也可以减弱。而结点根据其所处的位置不同,其在网络中体现的重要性也不尽相同。“紧密度中心性”是用来衡量一个结点到达其它结点的“快慢”的指标,即一个有较高中心性的结点比有较低中心性的结点能够更快地(平均意义下)到达网络中的其它结点,因而在该网络的传播过程中有更重要的价值。原创 2022-11-05 22:31:18 · 569 阅读 · 0 评论 -
PTA 7-13 畅通工程之局部最小花费问题(prim算法和Kruskal算法)
prim算法:该算法的时间复杂度和节点个数有关,也就是该算法适用于节点数少,边多的情况Kruskal算法:该算法重点在看边数多少,因此其适用于边多节点少的图。原创 2022-11-05 18:12:20 · 822 阅读 · 0 评论 -
UVA - 122(动态创建二叉树)
但是看见刘汝佳老师的提示,意识到开数组的话节点数最多有256个,所以数组耗费的内存是巨大的,考虑到给出的输入数据是以节点和节点的类似哈夫曼树(不是哈夫曼树)的编码方式的遍历序列,可以在输入的同时,根据输入的节点相关信息来动态创建一个该节点的树,原创 2022-11-02 21:24:23 · 110 阅读 · 0 评论 -
PTA6-6 带头结点的链式表操作集
细节需考虑原创 2022-10-19 21:00:42 · 108 阅读 · 0 评论 -
回溯法在二叉树中的应用(或位运算和递归结合)
这其实就要从进入和离开子树的递归说起了,我们看到的递归仅仅有一两句话,但是实际上他是由很多个递归嵌套起来的,举个例子。所以说在第一个叶子结点执行完后,接着是回溯递归该叶子结点父节点的右子树,然后再通过两次回溯到达叶子结点的上一层,再进行递归,所以说也就有了二叉树全部的不同路径的走法。原创 2022-10-16 21:44:52 · 191 阅读 · 0 评论