数据结构
文章平均质量分 85
风起、风落
大三在读 但行好事,莫问前程
展开
-
删除链表中重复的结点&&对链表进行插入排序&&复制带随机指针的链表
构造这个链表的 深拷贝。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点。在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。..原创 2022-08-07 07:54:21 · 277 阅读 · 18 评论 -
环形链表&&环形链表 II
给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true。否则,返回 false。* };= NULL) {}这道题的思考还是比较简单的 使用快慢指针。...原创 2022-08-04 15:20:23 · 574 阅读 · 12 评论 -
归并排序应用——剑指 Offer 51. 数组中的逆序对
由于right数组已经遍历完,所以循环停止,再次判断两个数组是否存在数4.递归展开图原创 2022-12-09 11:45:40 · 1285 阅读 · 74 评论 -
归并排序 (递归+非递归)
2. 归并排序 非递归1. 思想原创 2022-12-07 20:34:09 · 2440 阅读 · 84 评论 -
二叉树模板套题——相同的树的应用
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。输出:true 示例 2: 输入:p = [1,2], q = [1,null,2] 输出:false 示例 3: 输入:p =二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。因为对称二叉树主要看的是根的左子树与右子树之间的差别,所以把左子树与右子树单独表示出来。第一棵树根的左子树的值与第二颗树的右子树的值进行比较。第一棵树根的右子树的值与第二颗树的左子树的值进行比较。也可以看做它自身的一棵子树。原创 2022-11-28 12:40:03 · 763 阅读 · 29 评论 -
堆排序+TOPK问题
因为 向上调整算法的时间复杂度为O(NlogN) ,而向下调整算法的时间复杂度为 O(N)所以使用向下调整算法建堆更好。原创 2022-11-22 13:44:19 · 1843 阅读 · 74 评论 -
堆 (带图详解)
如果有一个关键码的集合K = { , , ,…, },把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中,并满足: = ) i = 0,1,所以要从倒数第二层开始调整。原创 2022-11-19 10:50:54 · 1992 阅读 · 70 评论 -
力扣刷题链表需要调试?一个简单的调试器帮你解决苦恼
本人在刷链表题时,由于是新手,所以老是过不去,需要调试,力扣会员开不起,在VS自己创建一个链表太麻烦 ,所以就有了今天这个。原创 2022-11-04 15:34:33 · 1813 阅读 · 87 评论 -
迷宫最短路径问题
为了让问题简单,假设这是一个n*m的格子迷宫,迷宫每个位置为0或者1,0代表这个位置有障碍物,小青蛙达到不了这个位置;小青蛙初始在(0,0)位置,地下迷宫的出口在(0,m-1)(保证这两个位置都是1,并且保证一定有起点到终点可达的路径),小青蛙在迷宫中水平移动一个单位距离需要消耗1点体力值,向上爬一个单位距离需要消耗3个单位的体力值,向下移动不消耗体力值,当小青蛙的体力值等于0的时候还没有到达出口,小青蛙将无法逃离迷宫。现在需要你帮助小青蛙计算出能否用仅剩的体力值跳出迷宫(即达到(0,m-1)位置)。原创 2022-09-17 16:22:42 · 2403 阅读 · 34 评论 -
百度面试题——迷宫问题(超详细解析)
迷宫问题的本质是图的遍历问题,从起点开始不断四个方向探索,直到走到出口,走的过程借助栈记录走过的路径,栈记录坐标有两个作用,一方面是记录走过的路径,一方面方便走到死路时进行回溯其他的道路。它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线。此时的顺序为 (0,0),(1,0),(1,1),(1,2),(2,2)3.在下标为(1,0)时上面为1不能走,下面为0可以走。6.注意此时的下标(1,0) 只能走左,右两个方向,原创 2022-09-16 15:46:39 · 8064 阅读 · 44 评论 -
KMP算法的实现详解
KMP是一种改进的字符串匹配算法,该算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。=p[k]时,一直通过next数组值返回到前面的p所在,但到第一个数依旧p[i]!直到p[i]==p[k],再通过next[i+1]=p[k+1], 确定p[i+1]对应的next下标数。而在if循环中如果不加入j==-1的判断 ,只有 sub[i]==sub[j],则会造成越界。=p[k],则从当前位置继续回退,next[j]=k来表示,不同的 j 对应一个k值,原创 2022-09-13 19:29:38 · 1360 阅读 · 53 评论 -
448. 找到所有数组中消失的数字&&238. 除自身以外数组的乘积
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。以 输入:nums = [4,3,2,7,8,2,3,1]输入:nums = [4,3,2,7,8,2,3,1]输入: nums = [-1,1,0,-3,3]输入: nums = [1,2,3,4]输出: [24,12,8,6]输出: [0,0,9,0,0]原创 2022-09-09 11:55:14 · 337 阅读 · 24 评论 -
八大排序(下)
所以我们先判断下是否符合区间值>1的条件,如果符合,则先将右边的右入栈,再入右边的左 ,其次入左边的右,再入,做左边的左。2.再从左边找比key大的数,找到后将值传给左边pivot所在位置 ,同时pivot指向左边。当左区间的数不够gap所分的数,右区间不存在时,若将左区间拷贝回去会出现随机值。则gap为1时就将 左边区间个数为1 与右边区间个数为1 进行排序。gap为2时就将 左边区间个数为2 与右边区间个数为2 进行排序。gap为4时就将 左边区间个数为4 与右边区间个数为4 进行排序。原创 2022-09-03 16:38:56 · 676 阅读 · 46 评论 -
八大排序 (上)
思想为 :先选定一个整数,把 待排序文件中所有记录分组,所有距离内的记录在同一组中,再对每一组内的记录进行排序,重复分组和排序, 直到=1时结束.把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。直接选择排序 ,无论 数组处于 有序 (最好情况下),还是无序 (最坏情况下) 都需要将整个数组遍历一遍 ,2.预排序会使数组接近有序 ,如gap=1 时 ,就为直接插入排序,时间复杂度为O(N)gap越大,预排完,越不接近有序,原创 2022-09-02 13:55:24 · 325 阅读 · 12 评论 -
二叉树的详细实现(含递归展开图)
一个二叉树,如果每一个层的结点都达到最大值,则这个二叉树就是满二叉树,也就是说如果一个二叉树的层数为k,结点总数为(2^k)-1,则就为满二叉树。对于深度为k的,有n个结点的二叉树,且仅当其每一个结点与深度为k的满二叉树中编号从1到n的结点,称为完全二叉树。一颗二叉树是结点的有限集合,该集合或者为空,或者由一个根节点加上两棵别称为左子树和右子树的二叉树的组成。若规定根节点的层数为1,则深度为h的二叉树的最大结点数是(2^h)-1。若规定根节点的层数为1,具有n个结点的满二叉树的深度h=log N。.....原创 2022-08-31 16:04:21 · 846 阅读 · 18 评论 -
栈和队列的实现
int top;} ST;} queue;原创 2022-08-23 14:15:10 · 764 阅读 · 15 评论 -
双向带头循环链表的(增删查改)的实现
带头双向循环链表由带哨兵位的头节点和前驱、后继前驱指向它的前一个节点后继指向它的后一个节点但由于本身这个头节点是不储存有效数据的,所以设置将它的前后都指向自己,可以很大程度避免在接口时报错...原创 2022-08-22 13:19:56 · 303 阅读 · 20 评论 -
单链表的(增删查改)的实现
## 1.链表的概念>一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针连接次序实现的。## 2.链表优点>1.空间上按需所给空间>2.在头部和中间插入时,不需要挪动数据3.二级指针问题4.单链表的接口实现1.尾插2.尾删6.指定插原创 2022-08-21 16:51:36 · 263 阅读 · 12 评论 -
顺序表的(增删查改)实现
顺序表的增删查改原创 2022-08-20 16:12:40 · 327 阅读 · 12 评论 -
时间复杂度与空间复杂度
正常来说,操作次数应为o(N^2)+o(2*N)+o(M),但是只保留o(N ^2)如果N为一个很大的数,如100000,加一个常数区别不大,所以就不需要加上了。但若N为一个很大的数 如100000,平方后为10000000000,因为变量的个数为常数个,所以在大O的渐进法中为O(1)最好的情况下为有序,执行n-1次就结束了,即O(N)反之为 1* 2* 2 * 2 * 2 …然后变为第二个数与后面的数比较,比较次数为n-2。操作次数为O(2*N)+10,但只保留O(N)操作次数为 1 +2+3+…原创 2022-08-19 17:12:38 · 223 阅读 · 16 评论 -
二叉树的最大深度&& 平衡二叉树&&二叉树遍历
的博客主页👕参考网站:牛客网💻首发时间:🎞2022年8月18日🎠🎨你的收入跟你的不可替代成正比🀄如果觉得博主的文章还不错的话,请三连支持一下博主哦💬给大家介绍一个求职刷题收割offer的地方👉。...原创 2022-08-18 21:15:03 · 256 阅读 · 26 评论 -
有效的括号&&用队列实现栈&&用栈实现队列&&设计循环队列
在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。本题与上个类似题不同的是,如果设置一个为空的栈,一个不为空的栈,则会发现将数据传给空的栈中时,因为栈时先进后出,所以顺序回颠倒。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。主要思想为将数据传入不为空的队列中,想要找到栈顶元素时就将n-1个元素都转移到空的队列中,返回不为空的队列的最后一个元素即栈顶元素并删除元素,若此时再返回栈顶元素即队列最后一个元素。........原创 2022-08-13 07:23:39 · 260 阅读 · 12 评论 -
链表中倒数第k个节点&&合并两个有序链表&&反转链表&&移除链表元素
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。输入:head = [1,2,6,3,4,5,6], val = 6。输入:l1 = [1,2,4], l2 = [1,3,4]输入:head = [7,7,7,7], val = 7。输入:l1 = [], l2 = [0]输出:[1,1,2,3,4,4]输出:[1,2,3,4,5]..原创 2022-08-08 10:32:20 · 151 阅读 · 22 评论 -
相交链表&&分割链表&& 链表的中间结点&&回文链表
ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = NULL.给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null。给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。给定一个头结点为 head 的非空单链表,返回链表的中间结点。...原创 2022-08-07 18:13:36 · 171 阅读 · 8 评论