![](https://img-blog.csdnimg.cn/20200129123352550.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
文章平均质量分 92
数据结构
SongBai1997
每个努力生活的人都值得被尊重。
展开
-
后缀数组 - 应用
后缀数组的应用原创 2022-09-16 18:57:26 · 411 阅读 · 1 评论 -
子集和 DP - 模板详解
子集和 DP原创 2022-09-13 20:46:35 · 492 阅读 · 0 评论 -
后缀数组 - 模板详解
详解后缀数组模板原创 2022-09-10 19:06:07 · 408 阅读 · 0 评论 -
栈与队列的相互实现
文章目录问题:用栈实现队列解题思路C++代码问题:用栈实现队列题目链接解题思路队列是先进先出的,而栈是先进后出的,单用一个栈是不能完成任务,我们增加一个栈,分别设为s1和s2入队操作:直接将元素入栈到s1,出队操作:若s2不为空,直接出栈,若s2为空,则先将s1中的元素全部出栈并压入s2中,然后对s2进行出栈操作,这样就能实现先进先出。C++代码class MyQueue {...原创 2020-04-03 15:23:12 · 276 阅读 · 0 评论 -
栈 | 最小栈
文章目录题目解题思路C++代码题目题目链接解题思路设进行操作的栈为s1,如果没有取得栈中最小值的操作,可以很轻松解决问题,问题的难点就在于如何在常数时间里找到栈中的最小值,为了实现这一目标我们再开一个栈s2,将栈s2维护为一个单调递减的栈,栈顶元素最小。入栈操作:直接将x压入s1,当x小于等于栈s2的栈顶元素时,将x也压入s2中,这是因为这时栈中的最小元素变为x了,当x大于栈s2的栈...原创 2020-04-03 11:05:50 · 352 阅读 · 0 评论 -
斜堆的实现
文章目录介绍分析代码实现(C++)介绍斜堆,也称为自适应堆,它是左倾堆的一个变种。与左倾堆一样,它通常也用于优先队列的实现,它的合并操作的时间复杂度也是O(logn)斜堆的结点template<class T>class Node{ public: T key;//键值 Node *l;//左孩子 Node *r;//右孩子 Node(T key,No...原创 2020-03-20 11:38:30 · 355 阅读 · 0 评论 -
左倾堆的实现
文章目录介绍左倾堆的结点NPL二叉堆的特点原理合并操作删除操作代码实现(C++)介绍左倾堆,也被称为左偏树、左偏堆、最左堆等。与二叉堆一样,它也是优先队列实现的方法。当涉及到对两个优先队列的合并时,左倾堆的效率比二叉堆的效率高很多。左倾堆的结点template<class T>class Node{ public: T key;//键值 int npl;//零路径...原创 2020-03-20 11:35:34 · 685 阅读 · 0 评论 -
二叉堆的实现
文章目录介绍实现原理代码实现(C++)最大堆最小堆介绍二叉堆是完全二元树或者近似完全二元树,按照数据的排列方式可以分为两种:最大堆和最小堆。最大堆:父节点的键值总是大于或等于任何一个子节点的键值。最小堆:父节点的键值总是小于或等于任何一个子节点的键值。实现原理1、二叉堆一般使用数组实现,如果从索引1开始存放元素,那么i 的左孩子是2*ii 的右孩子是2*i+1i 的父节点 ...原创 2020-03-20 11:29:48 · 473 阅读 · 0 评论 -
主席树
文章目录静态主席树动态主席树静态主席树推荐博客模板(网上代码)#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 100000 + 5; int a[N], b[N], rt[N * 20], ls[N * 20], ...原创 2020-03-20 11:05:15 · 198 阅读 · 0 评论 -
树状数组
文章目录一、单点修改+区间和查询二、单点查询+区间修改三、单点修改+区间修改+区间和查询四、区间最值查询五、二维情况下的树状数组一、单点修改+区间和查询#include<iostream>using namespace std;int n,m,i,num[100001],t[200001],l,r;//num:原数组;t:树状数组 int lowbit(int x){ ...原创 2020-03-20 10:45:14 · 185 阅读 · 0 评论 -
AVL树的实现
文章目录介绍原理1、失去平衡的四种情况即相应的旋转操作2、增添3、删除代码实现(C++)介绍AVL树是最先被发明的自平衡二叉查找树,也被称为高度平衡树。相比二叉查找树,它的特点是AVL树中任何结点的两个子树的高度差别最大为1。AVL树的查找、插入和删除在平均和最坏情况下都是O(logn)原理1、失去平衡的四种情况即相应的旋转操作LL根的左子树的左子树还有非空子结点,导致根的左子树的高度...原创 2020-03-20 10:32:56 · 187 阅读 · 0 评论 -
队列 | 队列的实现
文章目录描述顺序队列(C++)描述队列是一种线性存储结构。队列中的数据是按照先进先出方式进出队列的。队列只允许在队首进行删除操作(出队),而在队尾进行插入操作(入队)。顺序队列(C++)#include<iostream> using namespace std; template<class T>class ArrayQueue{ public: ...原创 2020-03-10 16:54:37 · 291 阅读 · 0 评论 -
栈 | 栈的实现
文章目录描述顺序栈(C++)描述栈是一种线性存储结构,栈中数据是按照“先进后出”方式进出栈,向栈中添加/删除数据时,只能从栈顶进行操作。顺序栈(C++)#include<iostream> using namespace std; template<class T>class ArrayStack{ public: ArrayStack(); A...原创 2020-03-10 16:29:16 · 221 阅读 · 0 评论 -
二叉搜索树 | 二叉搜索树结点最小距离
文章目录问题:二叉搜索树结点最小距离解题思路C++代码问题:二叉搜索树结点最小距离问题链接解题思路二叉搜索树的中序遍历是一个递增的序列,相差最小的节点在中序遍历中相邻,因此进行中序遍历,并进行取差即可。C++代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * T...原创 2020-03-09 10:23:34 · 233 阅读 · 0 评论 -
二叉搜索树 | 二叉搜索树的查找操作
文章目录问题解题思路C++代码问题问题链接解题思路如果当前节点等于查找值,返回当前节点,大于查找值则在左子树中操作,小于查找值则在右子树中查找。C++代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNod...原创 2020-03-09 09:59:19 · 348 阅读 · 0 评论 -
二叉搜索树 | 二叉搜索树的插入操作
文章目录问题:二叉搜索树中的插入操作解题思路C++代码问题:二叉搜索树中的插入操作问题链接解题思路先进行查找操作,确定插入的位置,然后进行插入即可。C++代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * Tree...原创 2020-03-09 09:51:32 · 422 阅读 · 1 评论 -
二叉搜索树 | 二叉搜索树的删除操作
文章目录问题:删除二叉搜索树中的节点解题思路C++代码问题:删除二叉搜索树中的节点问题链接解题思路通过二叉搜索树的性质对待删除节点进行定位,设待删除节点为x则有一下两种情况情况一:x有两个孩子情况二:x至多只有一个孩子当x有两个孩子时我们要用x的前驱节点或者x的后继节点替代x,将其值赋给x,然后删除x的前驱或者后继节点,此时就是情况二,对于情况二,如果x没孩子,直接将x删除,如...原创 2020-03-08 17:53:47 · 520 阅读 · 0 评论 -
二叉搜索树 | 二叉搜索树中第K小的元素
文章目录题目解题思路C++代码题目题目链接解题思路二叉搜索树的中序遍历结果是递增的序列,因此通过中序遍历可以方便找出第k小的元素C++代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *righ...原创 2020-03-08 15:52:51 · 229 阅读 · 0 评论 -
二叉搜索树 | 验证二叉搜索树
文章目录问题:验证二叉搜索树解题思路C++代码问题:验证二叉搜索树问题链接解题思路由于BST是递归定义的数据结构,因此我们采用递归的思路进行判断。空树和只有一个节点的树可以视为BSTroot有左子树,判断左子树是否为BST,如果左子树是BST接着判断其最大的值是否小于root的值root有右子树,判断右子树是否为BST,如果右子树是BST接着判断其最小的值是否大于root的值...原创 2020-03-08 12:09:09 · 216 阅读 · 0 评论 -
二叉树 | 翻转二叉树
文章目录问题解题思路C++代码问题问题链接解题思路采用递归的思路root为NULL,返回NULLroot的左孩子指向翻转后的root的右子树root的右孩子指向翻转后的root的左子树C++代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeN...原创 2020-03-08 11:13:55 · 222 阅读 · 0 评论 -
二叉树 | 从根到叶节点
文章目录问题:路径总和解题思路C++代码问题:路径总和问题链接解题思路采用递归的思路root为NULL返回falseroot为叶节点时判断节点值和sum是否相等root有孩子时,对有孩子的分支进行判断对结果进行逻辑或运算C++代码/** * Definition for a binary tree node. * struct TreeNode { * int...原创 2020-03-08 11:01:00 · 469 阅读 · 0 评论 -
二叉树 | 建立二叉树
文章目录问题:从前序与中序遍历序列构造二叉树解题思路C++代码问题:解题思路C++代码问题:从前序与中序遍历序列构造二叉树问题链接解题思路前序遍历:根、左、右中序遍历:左、根、右前序遍历向量中的第一个元素就是根节点,我们通过根节点就可以将中序遍历分割成3部分,左、根、右,递归建立即可C++代码/** * Definition for a binary tree node. *...原创 2020-03-07 19:30:46 · 264 阅读 · 0 评论 -
二叉树 | 对称二叉树
文章目录问题:对称二叉树解题思路C++代码问题:对称二叉树题目链接解题思路采用递归的思路,对于树t1和t2,t1和t2是镜像要满足头节点值相等t1的左子树和t2的右子树是镜像t1的右子树和t2的左子树是镜像C++代码/** * Definition for a binary tree node. * struct TreeNode { * int val; ...原创 2020-03-07 18:20:28 · 342 阅读 · 0 评论 -
二叉树 | 二叉树的深度
文章目录问题:二叉树的最大深度解题思路C++代码问题:二叉树的最大深度问题链接解题思路采用递归的思路,如果root为NULL,返回0,否则返回1+max{左子树深度,右子树深度}C++代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *lef...原创 2020-03-07 17:35:54 · 364 阅读 · 0 评论 -
二叉树 | 判断二叉树是否相同
文章目录问题解题思路C++代码问题问题链接解题思路采用递归的思路,当p、q都为NULL,返回true,当仅一个元素为NULL返回false,当两个都不为空,则判断两节点的值是否相同,以及两个点的左右子树是否相同。C++代码/** * Definition for a binary tree node. * struct TreeNode { * int val; *...原创 2020-03-07 16:59:13 · 1638 阅读 · 0 评论 -
二叉树 | 二叉树的层次遍历
文章目录问题:二叉树的层次遍历解题思路C++代码问题:二叉树的层次遍历 II解题思路C++代码问题:二叉树的层次遍历问题链接解题思路使用队列和两个统计数量的变量cnt1、cnt2。cnt1表示本层节点的数量,初始为1,即根节点。cnt2表示下一层节点的数量。C++代码/** * Definition for a binary tree node. * struct TreeNo...原创 2020-03-07 13:25:55 · 324 阅读 · 0 评论 -
二叉树 | 二叉树的前序/中序/后序遍历的非递归实现
文章目录问题:二叉树的前序遍历解题思路C++代码问题:二叉树的中序遍历解题思路C++代码问题:二叉树的后序遍历解题思路C++代码问题:二叉树的前序遍历问题链接解题思路前序遍历按照根、左、右的顺序访问节点,非递归实现要使用到栈,我们先访问本节点,然后将本节点入栈,用于下次遍历此节点的右子树,然后继续访问本节点的左孩子,重复,直到本节点的左孩子为NULL,此时就可以退栈,直到栈顶节点的右孩子...原创 2020-03-07 11:34:59 · 269 阅读 · 0 评论 -
链表 | 环形链表
文章目录问题:环形链表解题思路C++代码问题: 环形链表 II解题思路C++代码问题:环形链表![在这里插入图片描述](https://img-blog.csdnimg.cn/20200306202857493.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nL...原创 2020-03-06 20:42:41 · 240 阅读 · 0 评论 -
链表 | 删除链表的节点
文章目录问题:删除指定值的节点解题思路C++代码问题:删除指定节点解题思路C++代码问题:删除指定值的节点题目链接解题思路新增一个头节点可以方便处理。C++代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * List...原创 2020-03-06 16:30:18 · 255 阅读 · 0 评论 -
链表 | 循环移动链表
文章目录问题: 旋转链表解题思路C++代码问题: 旋转链表题目链接解题思路先将单链表的尾节点链接到头节点形成循环链表,然后定位到旋转后的链表的头节点,并从此处断开即可。设链表长度为n,那么链表向右移动n的倍数个位置后仍然是原链表,因此将k%n。如何定位旋转后的链表的头节点?当向右移动1个位置,新头节点为倒数第1个,当向右移动2个位置,新头节点为倒数第2个…向右移动k%n个位置,新的头节点...原创 2020-03-06 16:12:58 · 875 阅读 · 0 评论 -
链表 | 合并有序链表
文章目录问题:合并两个有序链表解题思路C++代码问题:合并两个有序链表链接解题思路遍历两个链表,按照值的大小进行选择下一个要链接的节点,当只剩一个链表时,直接链接到后面即可C++代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next;...原创 2020-03-05 18:24:52 · 224 阅读 · 0 评论 -
链表 | 链表相加
前言使用单链表的节点存储一个数位,相关问题有这些问题一链接两数相加问题描述解题思路模拟加法过程,两链表对应位相加,记录进位,如果某链表位数不足则用0替代其值。C++代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ...原创 2020-03-05 15:58:53 · 324 阅读 · 0 评论 -
链表 | 倒数第k个节点
问题解题思路双指针法,开始时p1,p2都指向头节点,先让p2走N步,然后p1和p2一起走,当p2指向NULL时,p1就指向倒数第N个节点了,将p1进行删除,考虑到p1指向头节点,因此我们再使用pre指向p1的前一个结点。C++代码在这里插入代码片...原创 2020-03-05 15:31:23 · 236 阅读 · 0 评论 -
链表 | 反转链表
问题描述将单链表进行反转操作,如下图所示一、使用栈利用栈先进后出的特性,遍历链表,将每个结点加入栈中,最后进行出栈操作,先出栈的结点指向临近的后出栈的结点。C++代码//链表结点定义 typedef struct Node{ int val; struct Node* next;}*List;//反转函数 List reverse(List list){ if...原创 2020-03-05 15:30:07 · 313 阅读 · 0 评论 -
《数据结构与算法:RMQ》
算法RMQ题目RMQPOJ3264 Balanced Lineup【RMQ】POJ3368 Frequent values【RMQ】HDU3486 Interviewe【枚举+RMQ】HDU3193 Find the hotel【RMQ】The Preliminary Contest for ICPC China Nanchang National Invit...原创 2019-03-06 17:12:44 · 221 阅读 · 0 评论 -
CCPC2018-湖南全国邀请赛 HDU6276 Easy h-index【二分法】
Easyh-indexhttp://acm.hdu.edu.cn/showproblem.php?pid=6276Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2041Accepted Submission(s): 6...原创 2019-05-08 20:00:03 · 393 阅读 · 0 评论 -
51Nod_1278 相离的圆【贪心+二分】
51Nod_1278 相离的圆 http://www.51nod.com/Challenge/Problem.html#!#problemId=1278题目平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离的...原创 2019-01-23 17:59:05 · 323 阅读 · 0 评论 -
51Nod_1289 大鱼吃小鱼【栈】
51Nod_1289 大鱼吃小鱼 http://www.51nod.com/Challenge/Problem.html#!#problemId=1289 题目有N条鱼每条鱼的位置及大小均不同,他们沿着X轴游动,有的向左,有的向右...原创 2018-08-25 09:45:44 · 244 阅读 · 0 评论 -
L2-011 玩转二叉树
L2-011玩转二叉树 https://pintia.cn/problem-sets/994805046380707840/problems/994805065406070784题目给定一棵二叉树的中序遍历和前序遍历,请...原创 2019-03-27 17:40:29 · 716 阅读 · 0 评论 -
L2-006 树的遍历
L2-006树的遍历 https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456题意给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历...原创 2019-03-26 21:24:50 · 383 阅读 · 0 评论