
数据结构
文章平均质量分 57
abutu999
这个作者很懒,什么都没留下…
展开
-
【算法】组合回溯专题
给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为 target 的不同组合数少于 150 个。为了去重,需使用idx来约束每轮的终点有了 4 3 2 后就不能出现 2 3 4。原创 2024-04-24 19:21:41 · 318 阅读 · 0 评论 -
【数据结构与算法】二分图的最大匹配
给定一个二分图,其中左半部包含 n1 个点(编号 1∼n1),右半部包含 n2 个点(编号 1∼n2),二分图共包含 m 条边。数据保证任意一条边的两个端点都不可能在同一部分中。请你求出二分图的最大匹配数。二分图的匹配:给定一个二分图 G,在 G 的一个子图 M 中,M 的边集 {E} 中的任意两条边都不依附于同一个顶点,则称 M 是一个匹配。二分图的最大匹配:所有匹配中包含边数最多的一组匹配被称为二分图的最大匹配,其边数即为最大匹配数。输入格式第一行包含三个整数 n1、 n2 和 m。原创 2024-03-28 21:27:34 · 358 阅读 · 0 评论 -
【数据结构与算法】用染色法判定二分图
给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环。请你判断这个图是否是二分图。输入格式第一行包含两个整数 n 和 m。接下来 m 行,每行包含两个整数 u 和 v,表示点 u 和点 v 之间存在一条边。输出格式如果给定图是二分图,则输出 Yes,否则输出 No。原创 2024-03-26 21:48:47 · 247 阅读 · 0 评论 -
【数据结构与算法】Kruskal最小生成树
【代码】【数据结构与算法】Kruskal最小生成树。原创 2024-03-24 17:12:30 · 192 阅读 · 0 评论 -
【数据结构与算法】spfa判断是否存在负环
给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你判断图中是否存在负权回路。输入格式第一行包含整数 n 和 m。接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。输出格式如果图中存在负权回路,则输出 Yes,否则输出 No。数据范围1≤n≤2000,1≤m≤10000,图中涉及边长绝对值均不超过 10000。原创 2024-03-20 16:44:34 · 212 阅读 · 0 评论 -
【数据结构与算法】求带负权值的最短路径——spfa方法
给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 impossible。数据保证不存在负权回路。输入格式第一行包含整数 n 和 m。接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。输出格式输出一个整数,表示 1 号点到 n 号点的最短距离。如果路径不存在,则输出 impossible。原创 2024-03-20 16:11:04 · 607 阅读 · 0 评论 -
【Dijkstra算法】求图的最短路
给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。输入格式第一行包含整数 n 和 m。接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。输出格式输出一个整数,表示 1 号点到 n 号点的最短距离。如果路径不存在,则输出 −1。原创 2024-03-18 20:49:50 · 357 阅读 · 0 评论 -
【BFS】计算图中点的层次
给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环。所有边的长度都是 1,点的编号为 1∼n。请你求出 1 号点到 n 号点的最短距离,如果从 1 号点无法走到 n 号点,输出 −1。输入格式第一行包含两个整数 n 和 m。接下来 m 行,每行包含两个整数 a 和 b,表示存在一条从 a 走到 b 的长度为 1 的边。输出格式输出一个整数,表示 1 号点到 n 号点的最短距离。原创 2024-03-18 19:36:04 · 265 阅读 · 0 评论 -
【DFS】树的重心
存储方式。原创 2024-03-18 19:00:31 · 443 阅读 · 0 评论 -
【BFS】走迷宫问题——acwing844
给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1) 处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m) 处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。输入格式第一行包含两个整数 n 和 m。接下来 n 行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。原创 2024-03-16 17:03:18 · 320 阅读 · 0 评论 -
【DFS算法】排列数字——acwing 842
给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。输入格式共一行,包含一个整数 n。输出格式按字典序输出所有排列方案,每个方案占一行。数据范围1≤n≤7。原创 2024-03-15 21:07:41 · 438 阅读 · 0 评论 -
【算法】字符串哈希
给定一个长度为 n 的字符串,再给定 m个询问,每个询问包含四个整数 l1,r1,l2,r2,请你判断 [l1,r1] 和 [l2,r2] 这两个区间所包含的字符串子串是否完全相同。字符串中只包含大小写英文字母和数字。输入格式第一行包含整数 n 和 m,表示字符串长度和询问次数。第二行包含一个长度为 n 的字符串,字符串中只包含大小写英文字母和数字。接下来 m 行,每行包含四个整数 l1,r1,l2,r2,表示一次询问所涉及的两个区间。注意,字符串的位置从 1 开始编号。输出格式。原创 2024-03-11 20:57:23 · 345 阅读 · 0 评论 -
【算法】Hash存储——开放寻址法
维护一个集合,支持如下几种操作:I x,插入一个整数 x;Q x,询问整数 x是否在集合中出现过;现在要进行 N次操作,对于每个询问操作输出对应的结果。输入格式第一行包含整数 N,表示操作数量。接下来 N行,每行包含一个操作指令,操作指令为 I x,Q x 中的一种。输出格式对于每个询问指令 Q x,输出一个询问结果,如果 x 在集合中出现过,则输出 Yes,否则输出 No。每个结果占一行。原创 2024-03-11 19:54:43 · 364 阅读 · 0 评论 -
【数据结构】21 Trie字符串统计
Trie树又称字典树、单词查找树。是一种能够高效存储和查找字符串集合的数据结构。原创 2024-03-07 11:06:54 · 241 阅读 · 0 评论 -
【数据结构】20 树的应用(堆及其操作)
堆是一种优先队列,从堆中取出元素时按照元素的优先级大小,而不是元素进入队列的先后顺序。堆的最常用结构是二叉树,一般为完全二叉树。通常使用数组来实现堆的存储。:任一结点的值大于或等于其子节点的值。这一性质决定了根节点元素的值在整个堆里是最大的。:任一结点的值小于或等于其子节点的值。这一性质决定了根节点元素的值在整个堆里是最小的。需要注意的是,兄弟节点之间没有什么约束关系,比如 可能会出现左子树个节点的值都大于右子树的所有结点。原创 2024-03-04 20:25:54 · 433 阅读 · 0 评论 -
【数据结构与算法】浮点数二分
给定一个浮点数 n,求它的三次方根。输入格式共一行,包含一个浮点数 n。输出格式共一行,包含一个浮点数,表示问题的解。注意,结果保留 6位小数。数据范围输入样例:1000.00输出样例:10.000000。原创 2024-03-03 16:56:25 · 174 阅读 · 0 评论 -
【数据结构与算法】整数二分
对一个排好序的数组,要求找到大于等于7的最小位置和小于等于7的最大位置。原创 2024-03-02 21:46:57 · 351 阅读 · 0 评论 -
【数据结构】归并排序
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。原创 2024-03-01 21:24:07 · 421 阅读 · 0 评论 -
【排序算法】快速排序
采用“分治”的思想,对于一组数据,选择一个基准元素(base),通常选择第一个或最后一个元素。通过第一轮扫描,比base小的元素都在base左边,比base大的元素都在base右边。再有同样的方法递归排序这两部分,直到序列中所有数据均有序为止。原创 2024-02-29 22:15:34 · 378 阅读 · 0 评论 -
【每日一题】2.28 由前序遍历和中序遍历确定后序遍历
假定一棵二叉树的每个结点都用一个大写字母描述。给定这棵二叉树的前序遍历和中序遍历,求其后序遍历。输入格式输入包含多组测试数据。每组数据占两行,每行包含一个大写字母构成的字符串,第一行表示二叉树的前序遍历,第二行表示二叉树的中序遍历。输出格式每组数据输出一行,一个字符串,表示二叉树的后序遍历。数据范围输入字符串的长度均不超过 26输入样例:ABCBACFDXEAGXDEFAG输出样例:BCAXEDGAF。原创 2024-02-28 20:19:04 · 261 阅读 · 0 评论 -
【每日一题】2.27 验证二叉搜索树
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。原创 2024-02-27 21:04:47 · 215 阅读 · 0 评论 -
【数据结构】18 二叉搜索树(查找,插入,删除)
二叉搜索树也叫二叉排序树或者二叉查找树。它是一种对排序和查找都很有用的特殊二叉树。原创 2024-02-17 20:11:21 · 652 阅读 · 0 评论 -
【数据结构】17 二叉树的建立
由于树是非线性结构,创建一颗二叉树必须首先确定树中结点的输入顺序,常用方法是先序创建和层序创建。层序创建所用的节点输入序列是按数的从上至下从左到右的顺序形成的各层的空结点输入数值0。原创 2024-02-17 19:07:12 · 526 阅读 · 1 评论 -
【每日一题】06 排序链表
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表。原创 2024-02-16 23:51:16 · 730 阅读 · 0 评论 -
【数据结构】16 二叉树的定义,性质,存储结构(以及先序、后序、中序遍历)
/结点数据//指向左子树//指向右子树。原创 2024-02-16 22:49:36 · 1620 阅读 · 0 评论 -
【数据结构】15 队列应用实例:多项式加法运算
我们准备采用不带头节点的单向链表结构表示一元多项式,并按照指数递减的顺序排列各项。对列表存放的两个多项式进行加法运算时,可以使用两个指针p1和p2。初始时的p1和p2分别指向这两个多项式第1个节点(指数的最高项)。通过循环不断比较p1和p2所指的节点,比较结果为以下三种情况之一并作不同处理。原创 2024-02-14 21:19:31 · 693 阅读 · 0 评论 -
【数据结构】14 队列(带头结点的链式存储和顺序存储实现)
队列是一个有序线性表,但是队列的插入、删除操作是分别在线性表的两个不同端点进行的。设一个队列Qa1a2...an,那么a1被称为队头元素,an为队尾元素。假如将元素A,B,C,D依次插入队列,第一个从队列中删除的元素为A,即先插入的将被先删除,故队列也称为先进先出表。:队列:一个有0个或者多个元素的有穷线性表:对于一个长度为正整数MaxSize的队列Q, 记队列中的任一元素X。原创 2024-02-12 22:37:29 · 1746 阅读 · 0 评论 -
【数据结构】13:表达式转换(中缀表达式转成后缀表达式)
从头到尾依次读取中缀表达式里的每个对象,对不同对象按照不同的情况处理。原创 2024-02-11 20:58:06 · 536 阅读 · 0 评论 -
【数据结构】12 堆栈应用:表达式求值
有一个常量表达式的中缀表达式为:5 + 6 / 2 - 3 * 4,其后缀形式表示为: 5 6 2 / + 3 4 × -。后缀表达式的特点是运算符位于两个预算数之后。其前缀表达式为: - + 5 / 6 2 × 3 4。后缀表达式相比于中缀表达式的求值要容易很多。从左到右扫描该表达式:(1)遇见运算数5 6 2时不做计算,同时将5 6 2压入栈中。(2)扫描到 / 时,把栈中最前的两个数取出,做运算得到结果3,压入栈中。原创 2024-02-11 18:54:17 · 1223 阅读 · 1 评论 -
【数据结构】11 堆栈(顺序存储和链式存储)
可认为是具有一定约束的线性表,插入和删除操作都在一个称为栈顶的端点位置。也叫后入先出表(LIFO):堆栈(STACK): 一个有0个或者多个元素的有穷线性表。生成空堆栈,其最大长度为MaxSize判断栈S是否已满。将元素X压入堆栈删除并返回栈顶元素如果将abcd四个字符按顺序压入堆栈,是否可能产生cabd这样的序列,共可能产生多少种输出?:只可能是A进——A出: 2种情况A进A出 B进B出A进B进 B出A出: 5种情况A进B进C进 C出B出A出。原创 2024-02-09 11:45:26 · 1890 阅读 · 1 评论 -
【数据结构】10 广义表与多重链表
广义表不仅跟线性表一样可以表示简单是线性顺序关系,而且可以表达更复杂的非线性多元关系。GLista1a2...ai−1aiai1...an其中,ai可以是单元素,也可以是广义表。由于广义表的元素可以是不同的结构,因此不适于顺序存储,通常用,也就是用由结点组成的链表来表示广义表。结点对应每个元素。如果该元素还是一个广义表,则通过该节点引出另一个链表。广义表的结点可能由两种情况。原创 2024-02-08 15:38:30 · 1040 阅读 · 0 评论 -
【数据结构】09 线性表的链式存储实现
线性表的链式存储不需要用连续的存储单元来实现,不需要逻辑上相邻的两个数据元素在物理上也相邻,它是通过链建立其数据元素之间的逻辑关系,因此对线性表的插入、删除不需要移动数据元素,只需要修改连。为了访问链表,必须找到链表的第一个数据单元,因此实际应用中常用一个称为“表头(Header)”的指针指向链表的第一个单元,并用它表示一个具体的链表。相关操作初始化插入原创 2024-02-07 22:28:19 · 426 阅读 · 1 评论 -
【数据结构】08 线性表的顺序存储
由同一类型的数据元素构成的有序序列的线性结构。:由n个元素构成的有序序列(a1,a2,…,an),ai1为ai的直接后继,ai−1是ai的直接前驱。直接前驱和直接后驱反映了元素之间一对一的邻接关系。(1)L。原创 2024-02-01 20:19:53 · 569 阅读 · 1 评论 -
【数据结构】07双指针技巧
给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true。否则,返回 false。示例1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。原创 2024-02-01 18:35:08 · 777 阅读 · 1 评论 -
【数据结构】06单链表逆转
和 q->Next =L;顺序不能颠倒,若p= p->Next放在后面,则p的next就不是原链表,而是L了。L是给定单链表,函数Reverse要返回被逆转后的链表。本题要求实现一个函数,将给定的单链表逆转。原创 2024-02-01 18:20:40 · 164 阅读 · 1 评论 -
【数据结构】05链表相关操作
链表是一种,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种结构。链表由一系列节点(链表中每一个元素称为节点)组成,每个节点包括两个部分: 一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域。原创 2024-01-30 20:48:31 · 325 阅读 · 1 评论 -
【数据结构】04数组的相关操作
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。原创 2024-01-28 23:12:43 · 314 阅读 · 0 评论 -
【数据结构】02 字符串匹配&KMP算法
有如下两个字符串S和P,需要判断出P是否为S的子串。简单的方法是以S的每个字符为匹配串的首个字符,将其与P串进行匹配。这个算法的时间复杂度为O(mn),若遇到较大的字符串,耗时长。原创 2024-01-26 18:09:31 · 1036 阅读 · 1 评论 -
【数据结构】01数组与字符串
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。:暴力遍历: 二分查找思想:小于中间数,往左查;大于中间数,往右查。查到最后left = right时,还未查到: 若小于该值,返回mid;若大于该值,返回mid+1;原创 2024-01-25 20:52:36 · 398 阅读 · 0 评论