- 博客(63)
- 问答 (1)
- 收藏
- 关注
原创 [图论]万字解析图的最短路算法(详细带图解和代码)
图的最短路算法图的存储方式领接矩阵领接表最短路算法知识框架单源最短路径路径权值全为正数dijkstra算法(版本1)dijkstra(堆优化版本)路径权值存在负数bellmanFord算法spfa算法(基于bellmanFord的优化)多源最短路径(Floyd算法)参考文章图的存储方式图主要有以下两种表示方法:邻接矩阵和邻接表(注意,本文仅讨论有向图的情况)领接矩阵假设我们有以下的图每个圈表示一个图中节点,圈里面的数字表示此节点编号,每个边都有权重我们可以用一个二维数组存储这个图:设此二维矩阵
2025-01-15 15:29:27
1038
原创 [状压dp]经典题:蒙德里安的梦想
本题有多种摆法,我们只需要考虑横着摆放的长方形满足要求后,竖着放的只有1种符合要求,根据乘法原理,总摆放数就是。
2025-01-12 20:39:46
438
原创 c++类继承
继承是一种简化代码的手段之一,使代码可以实现复用。它允许在原来类的功能上进行扩展,衍生出新的功能。也可以把多个类的基本信息提取到某个类,减少代码的冗余。其中被继承的类通常叫做父类或基类,继承下来的类叫做子类或派生类。...
2022-07-25 22:15:09
4457
17
原创 单调栈的实现和应用
单调栈讲解问题引入假设我们这儿有一个数组arr我们现在想得到数组中任意一个数左边第一个比它小(或大)的下标位置和右边第一个比它小(或大)的下标位置的信息比如上面的数字6,左边第一个比它小的数字是2,对应下标位置是2右边第一个比它小的数字是1,对应下标位置4,所以能生成以下信息6:[2,4]而我们规定,左边或者右边没有比其小的数字的话,把答案设为-1而我们现在需要每个数字的对应信息,这种问题我们该怎么求解呢?很容易想到暴力方法,我们遍历每一个数字,然后把每个数字往左往右遍历一遍查找符合要
2022-03-19 17:32:52
1041
17
原创 linux篇(四)linux进程(下)
作者介绍:关于作者:东条希尔薇,一名喜欢编程的在校大学生主攻方向:c++和linux码云主页点我作者优快云主页地址目录环境变量问题引入环境变量定义环境变量的操作认识命令行参数并获取环境变量进程地址空间(重点警告)程序空间回顾进程地址空间OS这样设计的原因环境变量问题引入我们运行我们自己的c语言程序,是怎么运行的呢?我们发现,运行我们的程序必须要在前面加上./这其实是为OS标识程序所在的位置那么问题来了,为什么有些程序不需要这个东西?比如我们的python先甩出结论:因为有
2022-03-15 15:50:27
1496
5
原创 linux篇(四)linux进程(上)
作者介绍:关于作者:东条希尔薇,一名喜欢编程的在校大学生主攻方向:c++和linux码云主页点我作者优快云主页地址目录认识操作系统感性的认识操作系统理性的认识操作系统初步认识OS的管理进程的认识PCB的基本数据说明查看进程PCB基本数据之标识符PCB基本数据之上下文数据利用fork来认识父子进程PCB基本数据之进程状态睡眠状态和运行状态特殊状态之僵尸状态特殊进程之孤儿进程PCB基本数据之优先级认识操作系统感性的认识操作系统我们的计算机,其实它的本质是由冯诺依曼结构为基础,由一个个硬件
2022-03-13 22:00:57
4933
9
原创 c++基础篇(四)STL(一)string类的介绍及其模拟实现
作者介绍:关于作者:东条希尔薇,一名喜欢编程的在校大学生主攻方向:c++和linux码云主页点我本系列仓库直通车作者优快云主页地址从今天开始为大家介绍一下STL的相关使用及其模拟实现笔者认为,STL是c++的灵魂,有了STL和泛型编程,让c++编程更加的方便与实用。最重要的一点就是我们不用像c语言那样自己实现一遍数据结构和算法了而这个系列,我将采用**STL标准函数使用后面紧跟模拟实现的排版策略,**让大家的理解更加深刻目录STL简介string类简介string的构造与析构库函数中
2022-03-06 11:43:14
1170
2
原创 滑动窗口(最大最小值)的经典例题
滑动窗口简单概念滑动窗口是我们假想出的一种数据结构,我们在这篇文章实现的窗口,能较快速的求区间最大最小值在一些区间不回退的题目中运行效率也十分优秀设窗口的左边界为l,右边界为r,(规定l<=r恒成立)我们可以通过滑动右边界,从窗口的右边进入数字也可以通过滑动左边界,从窗口左边出数字滑动窗口求区间最大值(leetcode239)原题链接题目描述:给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口
2022-02-23 22:39:18
4877
28
原创 c++基础篇(三)——模板初阶
作者介绍:关于作者:东条希尔薇,一名喜欢编程的在校大学生主攻方向:c++和linux码云主页点我本系列仓库直通车作者优快云主页地址印刷术是中国四大发明之一,它极大地便利了古代人对于读书的需求。设想,如果我们没有印刷术的话,我们要传播书籍该怎么做?我们必须要把这本书亲自手抄几万份后传播,这样的传播方式不仅非常的繁琐,而且浪费了很多不必要的人力我们有印刷术就会方便许多,我们只需要抄一遍书上的内容,把它抄在一个模子上,然后使用这个模板,就能很轻松的把它复印几万份而我们今天讲的内容,和古代的
2022-02-23 11:09:58
1319
21
原创 并查集实现及其应用
先看看度娘给出的定义吧:并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中。其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受;即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在比赛规定的运行时间(1~3秒)内计算出试题需要的结果,只能用并查集来描述。总结一下:如果我
2022-02-10 13:14:28
1726
26
原创 力扣每日一题——NO.33——搜索旋转排序数组
原题链接题目描述整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nu
2022-02-04 21:33:17
324
8
原创 高精度运算(除法待完善)
我们知道,在c语言中,数据的存储是有范围的,超出了这个范围的数据将不能有效的进行存储和运算而超出c语言储存范围的数,不能用c语言基本数据类型储存的数据,就叫做大数所以,为了解决大数的运算问题,我们来介绍一下如何在c语言中实现大数运算大数加减法首先介绍最基本的大数加减法这篇文章中我们把任意小于200位的非负整数的数都称作大数例如:88888888888888888888,123456789987654321而我们要储存这么大的数字,只能用一个字符数组来储存char a[200]={0};
2022-02-01 18:31:43
2604
9
原创 力扣每日一题——327.区间和的个数
原题链接题目描述给你一个整数数组 nums 以及两个整数 lower 和 upper 。求数组中,值位于范围 [lower, upper] (包含 lower 和 upper)之内的 区间和的个数 。区间和 S(i, j) 表示在 nums 中,位置从 i 到 j 的元素之和,包含 i 和 j (i ≤ j)。例如:输入:nums = [-2,5,-1], lower = -2, upper = 2输出:3解释:存在三个区间:[0,0]、[2,2] 和 [0,2] ,对应的区间和分别
2022-01-17 21:27:00
1470
24
原创 算法笔记——归并排序及其基础面试题
再谈归并排序在我以前的数据结构专栏中已经对归并排序做了介绍,这里我们开始先复习一下归并排序的思路与代码归并排序用到了分治的思想,将数组不断细分成小的几个区间,将每个区间排成有序后,再将大区间排为有序代码实现:(非递归实现)void _MergeSort(vector<int>&arr,int l,int m,int r);//归并操作的函数void MergeSort(vector<int>&arr){ int n=arr.size(); int
2022-01-16 12:18:03
1961
35
原创 c++基础篇(一)——c++快速入门(下)
作者介绍:关于作者:东条希尔薇,一名喜欢编程的在校大学生主攻方向:c++和linux码云主页点我本系列仓库直通车作者优快云主页地址本期重点,引用目录引用引用定义和表示引用的使用场景引用的特性引用和指针的对比常引用内联函数c++11新特性auto关键字范围for循环引用引用定义和表示首先,什么是引用?引用的本质是对一个变量取别名比如,你自己有一个大名,当然你肯定会有外号啥的(哈哈哈),你的外号就可以理解成这里的引用变量编译器对引用变量不会另外开空间,和被引用的变量共用
2022-01-14 22:19:55
1221
33
原创 初阶数据结构——经典排序算法
????????想快速入门数据结构,推荐订阅作者的初阶数据结构专栏!此专栏预计更新:顺序表,链表,栈,队列,二叉树,排序算法等等????????初阶数据结构我们通过c语言实现,所以此专栏也可以帮助大家巩固大家的c语言知识????????源代码已上传至我的码云前言非常感谢各位小伙伴的支持,我们的初阶数据结构系列在经过这篇文章后,也迎来了它的完结!这个系列我们使用纯c语言实现了一些简单的数据结构,用它们解决了一些简单的问题当年,可能有的小伙伴会问了:为啥作者没有收录图或者其它的数据结构啊
2021-11-20 11:10:51
5800
43
原创 力扣每日一题——NO.98——验证二叉搜索树
题目原代码和图解已上传至我的码云题目描述:给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。思路求解这里我们首先要了解一下什么是二叉搜索树,我刚拿到这个定义误以为只需要根结点的左结点小于当前结点和右结点大于当前结点就行了所以我第一次写出了以下的错误代码这是我脑中构思出的判断思路bool isValidB.
2021-11-12 18:47:26
1763
22
原创 力扣每日一题填坑系列——链表多题组合
目录回文链表复制带随机指针的链表两两交换链表中的结点回文链表题目链接题目描述给定一个链表的 头节点 head ,请判断其是否为回文链表。如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。例如:[1,2,3,3,2,1]就是一个回文链表思路求解我们要解这道题,就要先抓住回文链表的特征它有什么特征?从后往前看和从前往后看相同也就是需要:前半段链表和后半段链表相同我们只需要:将后半段链表逆置,再依次与前半段链表比较即可至于怎么判断链表中点和逆置,已经在前面的博
2021-11-10 21:10:54
825
原创 初阶数据结构——二叉树
????????想快速入门数据结构,推荐订阅作者的初阶数据结构专栏!此专栏预计更新:顺序表,链表,栈,队列,二叉树,排序算法等等????????初阶数据结构我们通过c语言实现,所以此专栏也可以帮助大家巩固大家的c语言知识????????源代码已上传至我的码云前言我们在上篇文章中已经介绍了二叉树的相关性质及其应用,点我直达上一篇文章然而,在实际应用中,单纯地讲二叉树的增删查改是没有意义的因为存储和访问数据,将会变得特别的困难,因为二叉树是一种层次结构,需要递归来定义,在哪一点添加删除?这
2021-11-10 12:20:34
3178
47
原创 初阶数据结构——初识二叉树及其应用——堆——及其向下向上调整算法
????????想快速入门数据结构,推荐订阅作者的初阶数据结构专栏!此专栏预计更新:顺序表,链表,栈,队列,二叉树,排序算法等等????????初阶数据结构我们通过c语言实现,所以此专栏也可以帮助大家巩固大家的c语言知识????????源代码已上传至我的码云前言二叉树算是初阶数据结构的一个新坑吧,不仅仅是因为难度比前面的数据结构提升了一个档次,而且这也是我们学的第一种非线性结构我们在前面学的数据结构,无论是顺序表还是链表,不管它们在物理中的存储方式如何,它们的逻辑一定是串在一起的。但是
2021-11-05 16:53:02
2613
46
原创 力扣每日一题NO.622——循环队列
题目描述设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。你的实现应该支持如下操作:MyCircularQueue(k): 构造器,设置队列长度为 k 。Front: 从队首获取元素。如果队列
2021-11-02 11:38:33
337
原创 初阶数据结构——队列
????????想快速入门数据结构,推荐订阅作者的初阶数据结构专栏!此专栏预计更新:顺序表,链表,栈,队列,二叉树,排序算法等等????????初阶数据结构我们通过c语言实现,所以此专栏也可以帮助大家巩固大家的c语言知识????????源代码已上传至我的码云????????博主的微信公众号关注啦,关注我每天学习一道题,点我关注前言我们在前面已经学习了栈这种数据结构,已经了解了它是一种操作受限的线性表,其只能在栈顶进行插入与删除操作,遵循后进先出的规则而队列,与栈的本质差不多,都是操
2021-11-02 10:14:05
2337
54
原创 力扣每日一题——NO.142环形链表2
题目原代码和图解已上传至我的码云题目描述给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?思路求解这道题我们有两个思路去解决第一种思路我们在前面的文章中,已经讲.
2021-10-29 20:43:25
243
2
原创 初阶数据结构——栈
????????想快速入门数据结构,推荐订阅作者的初阶数据结构专栏!此专栏预计更新:顺序表,链表,栈,队列,二叉树,排序算法等等????????初阶数据结构我们通过c语言实现,所以此专栏也可以帮助大家巩固大家的c语言知识????????源代码已上传至我的码云????????博主的微信公众号关注啦,关注我每天学习一道题,点我关注知识引入其实栈这个概念,我们早在c语言阶段就了解过了。像啥函数栈帧呀,压栈啊啥的,我们都已经了解并掌握过了。我们今天实现的数据结构,也叫做栈,特征其实是跟函
2021-10-29 11:30:06
1112
12
原创 力扣每日一题NO.160.相交链表
题目原代码和图解已上传至我的码云题目描述:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。上图中我们就需要返回值为8的结点思路求解:首先我们需要检查它们到底相不相交,它们不相交的话就应该是这样最后两个链表都会遍历到NULL它们相交的时候,不管是什么情况,肯定会有:最后一个链表是相等的所以我们判断是否相交的时候可以用最后一个结点来判断如果不相等,就返回NULL。在寻找的时候,可能一般情况.
2021-10-28 15:29:38
393
5
原创 初阶数据结构——线性表——链表——带头双向循环链表
????????想快速入门数据结构,推荐订阅作者的初阶数据结构专栏!此专栏预计更新:顺序表,链表,栈,队列,二叉树,排序算法等等????????初阶数据结构我们通过c语言实现,所以此专栏也可以帮助大家巩固大家的c语言知识????????源代码已上传至我的码云????????博主的微信公众号关注啦,关注我每天学习一道题,点我关注前言其中在链表的实现中有很多种实现方法,主要取决于以下几个因素单向还是双向?循环还是不循环?带头还是不带头这几个特征两两组合,就可以看做一种链表的
2021-10-28 11:45:00
3092
27
原创 【重要】力扣每日一题.NO141.环形链表
画图讲解和源代码已上传至我的码云原题地址目录投票直通车题目描述给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。输入:head = [3,.
2021-10-25 21:51:36
297
10
空空如也
关于计组中系统总线控制的问题
2021-09-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人