
C\C++
文章平均质量分 56
abutu999
这个作者很懒,什么都没留下…
展开
-
【数据结构与算法】二分图的最大匹配
给定一个二分图,其中左半部包含 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 评论 -
【算法】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 评论 -
【算法】并查集
用于查找一个数字的祖宗数字比如 初始时,每个数字的祖宗是自己 find(i) = i若 要把 3 和 4 合并 则把3的祖宗设置为4 此时 p(find(3)) = 4若 要把 5 和 3 合并, 则先找到5和3的祖宗, 再把5的祖宗设置为3的祖宗每次合并集合时只需要更改祖宗元素即可。原创 2024-03-09 21:14:28 · 319 阅读 · 0 评论 -
【数据结构】21 Trie字符串统计
Trie树又称字典树、单词查找树。是一种能够高效存储和查找字符串集合的数据结构。原创 2024-03-07 11:06:54 · 241 阅读 · 0 评论 -
【数据结构】20 树的应用(堆及其操作)
堆是一种优先队列,从堆中取出元素时按照元素的优先级大小,而不是元素进入队列的先后顺序。堆的最常用结构是二叉树,一般为完全二叉树。通常使用数组来实现堆的存储。:任一结点的值大于或等于其子节点的值。这一性质决定了根节点元素的值在整个堆里是最大的。:任一结点的值小于或等于其子节点的值。这一性质决定了根节点元素的值在整个堆里是最小的。需要注意的是,兄弟节点之间没有什么约束关系,比如 可能会出现左子树个节点的值都大于右子树的所有结点。原创 2024-03-04 20:25:54 · 433 阅读 · 0 评论 -
【每日一题】3.4 合并区间
给定 n个区间 [li,ri],要求合并所有有交集的区间。注意如果在端点处相交,也算有交集。输出合并完成后的区间个数。例如:[1,3]和 [2,6]可以合并为一个区间 [1,6]。输入格式第一行包含整数 n。接下来 n行,每行包含两个整数 l和 r。输出格式共一行,包含一个整数,表示合并区间完成后的区间个数。原创 2024-03-04 18:28:45 · 254 阅读 · 0 评论 -
【acwing】前缀与差分
输入一个长度为 n的整数序列。接下来再输入 m个询问,每个询问输入一对 l,r。对于每个询问,输出原序列中从第 l 个数到第 r 个数的和。输入格式第一行包含两个整数 n和 m。第二行包含 n个整数,表示整数数列。接下来 m行,每行包含两个整数 l和 r,表示一个询问的区间范围。输出格式共 m行,每行输出一个询问的结果。原创 2024-03-04 17:04:44 · 265 阅读 · 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 评论 -
【每日一题】3.2 求逆序对
给定一个长度为 n的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第 i个和第 j个元素,如果满足 i<j 且 a[i]>a[j],则其为一个逆序对;否则不是。输入格式第一行包含整数 n,表示数列的长度。第二行包含 n个整数,表示整个数列。输出格式输出一个整数,表示逆序对的个数。数据范围 1≤n≤100000,数列中的元素的取值范围 [1,109]。输入样例:6输出样例:5。原创 2024-03-02 20:17:19 · 286 阅读 · 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 评论 -
【 每日一题】05 三角形最小路径和(DP4)
给定一个三角形 triangle ,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1。示例 1:输入:triangle = [[2],[3,4],[6,5,7],[4,1,8,3]]输出:11解释:如下面简图所示:23 46 5 74 1 8 3。原创 2024-02-14 19:58:37 · 355 阅读 · 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 评论 -
【每日一题】04最小路径和 (DP3)
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。原创 2024-02-11 15:26:05 · 256 阅读 · 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 评论 -
【每日一题】03 不同路径Ⅱ(DP2)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2解释:3x3 网格的正中间有一个障碍物。原创 2024-02-08 14:23:21 · 169 阅读 · 0 评论 -
【数据结构】09 线性表的链式存储实现
线性表的链式存储不需要用连续的存储单元来实现,不需要逻辑上相邻的两个数据元素在物理上也相邻,它是通过链建立其数据元素之间的逻辑关系,因此对线性表的插入、删除不需要移动数据元素,只需要修改连。为了访问链表,必须找到链表的第一个数据单元,因此实际应用中常用一个称为“表头(Header)”的指针指向链表的第一个单元,并用它表示一个具体的链表。相关操作初始化插入原创 2024-02-07 22:28:19 · 426 阅读 · 1 评论 -
【每日一题】02 不同路径(DP1)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 :输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。原创 2024-02-07 20:22:11 · 200 阅读 · 1 评论 -
【每日一题】01 二进制求和
给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。示例 1:输入:a = “11”, b = “1”输出:“100”示例 2:输入:a = “1010”, b = “1011”输出:“10101”原创 2024-02-07 19:36:16 · 308 阅读 · 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 评论