- 博客(252)
- 收藏
- 关注
原创 【C++算法】96.BFS解决拓扑排序_火星词典
用哈希表做的时候必须要初始化,遍历一下所有的字符串,每一个字符串找到一个字符后就要把对应的入度更新成0。这题的题意就是,给定外星的一堆词语,让我们来输出对应的字典序。就不能搞定了,需要在之前的双指针里面特殊处理一下。建图,这里不是数字了,用的是字符,可以用。和空比较不合法,直接返回。我们地球上的字典序是从。如何收集信息:用双指针。的,但是外星不一样。
2025-07-31 01:54:07
490
原创 【C++算法】94.BFS解决拓扑排序_课程表
判断能否完成学习 ,也就是问能否拓扑排序,是否有有向无环图,有向图中是否有环。每个顶点的入度可以用一个数组表示,数组里的数字就是入度。建图很关键,可以在下面的代码里面看到。主要是灵活的使用语言所使用的容器。根据算法流程,灵活建图。
2025-07-31 01:52:53
257
原创 【C++算法】93.BFS解决拓扑排序_拓扑排序简介
一开始的点都是入度为0的点,然后删除入度为0的点对应的边,然后一直重复过程直到结束。在有向无环图中,用顶点来表示一个活动,用边来表示活动的先后顺序的图结构。上面的就是有向无环图,下面就有环了,因为可以从4->5->6->4。找到做事情的先后顺序,拓扑排序的结果可能不是唯一的。入度:有几个顶点指向自己,入度就是几。出度:就是这个顶点有多少条边出去。详细概念可以自己网上找,比较繁琐。借助队列,来一次BFS即可。判断有向图中是否有环。
2025-07-31 01:52:11
254
原创 【C++算法】92.多源BFS_地图分析
可以把陆地放入新矩阵中置为0,然后往外扩一层为1,继续扩展。想找海洋到陆地的距离,也就是陆地到海洋的距离。曼哈顿距离实际上就是走的步数。这题其实和01矩阵是一样的。
2025-07-31 01:51:28
353
原创 【C++算法】91.多源BFS_地图中的最高点
一开始的1的位置我们可以都设置成陆地0,其他地方不写,因为我们要让矩阵中的最高高度值最大,那么我们每次向外扩展一层的时候,扩展的数字是不是也应该尽量大呢?这就是之前的多源BFS,这里的0就是超级源点,然后把这些1加进去,之后再扩展就是2了。
2025-07-31 01:50:47
183
原创 【C++算法】90.多源BFS_飞地的数量
但是可以优化一下,比如第一次判断后来一次BFS看看能否走出去,能走出去就把连通块标记为1,走不出去标记为0。解法一:一个一个判断(超时)也可以不超时,但是有的时候要对某个位置BFS两次。从四条边界的1开始走,往内走来一次搜索,看看能不能走进去。题目其实有点类似于之前的迷宫,遇到边界就可以出去。然后哪一些没有被标记的1就是答案。
2025-07-30 01:16:57
178
原创 【C++算法】89.多源BFS_01 矩阵
所以把0当作起点,1当作终点,从0开始向外扩展,遇到1就把最短路数填进去。解法一:一个位置一个位置求(最差的情况下会非常恐怖)把1当成起点就很难,因为不好更新。解法二:多源BFS+正难则反。
2025-07-30 00:55:22
413
原创 【C++算法】88.多源BFS_多源最短路问题简介
每个源点有一个小人,每个小人走一步,A位置的小人走了一步到了D,E位置,那么他的花费的步数肯定比DE位置的小人花费的路数多,可以舍弃。D,E位置的小人走了一步到B,C,而超级源点A位置的小人走了一步也到B,C。那么接下来的问题就是:怎么找到这个超级源点呢?相当于舍弃了不好的情况,把好情况留下来了。
2025-07-30 00:54:41
141
原创 【C++算法】87.BFS解决最短路径问题_为高尔夫比赛砍树
所以我们要先找到砍树的顺序,弄个二维数组先存一下下标和内容,然后按照内容由小到大排序。但是有个问题,你怎么知道砍树的顺序呢?把所有的最小值求出来然后加起来。砍掉3,从3到5到2到6到4。注意:砍树要从低到高砍。变成若干个迷宫问题了。砍掉1,从1到5到2。砍掉2,从2到5到3。砍掉4,从4到6到5。
2025-07-30 00:53:47
276
原创 【C++算法】86.BFS解决最短路径问题_单词接龙
每次可以挑一位自行改变成’a’-'z’的某一位。每次改变都需要在字典中存在,和之前的最小基因变化问题差不多。之前是从ATCG里面选,现在是’a’-'z’里面选。注意这里求得是单词数不是步数,所以不要忘记+1。
2025-07-30 00:52:26
269
原创 【C++算法】84.BFS解决最短路径问题_迷宫中离入口最近的出口
注意:自己一开始所在的地方不能作为出口,出口是和边界相邻的空白格所在的地方。实际上就是边权为1的最短路径问题,可以直接BFS。小人走到出口的地方就可以了,不需要走出去迷宫。
2025-07-30 00:50:36
320
原创 【C++算法】83.BFS解决最短路径问题_最短路径问题简介
然后同时把这两个元素弹出去(这里的同时指的是在一个for循环里面依次把B,C弹出去),相当于同时往外面扩充一层,把D,E丢进去。然后同时把这两个元素弹出去,相当于同时往外面扩充一层,(因为从D扩展的时候已经把E加进去了),把F,G丢进去。然后同时把这两个元素弹出去,相当于同时往外面扩充一层,把I丢进去。一个个圈就是点,一条条线就是边,有的时候还会给边加上权值,权值可以认为是边的长度。先把A丢进队列,然后弹出A,把A能去的地方B,C丢进队列。边权为1的最短路问题,可以从起点来一次BFS就可以了。
2025-07-29 23:28:51
194
原创 【C++算法】81.BFS解决FloodFill算法_岛屿的最大面积
当遇到第一个没有遍历过的1的时候,相当于找到一块陆地,同时要搞一个变量count来统计面积。要统计所有连通块的最大面积。
2025-07-29 23:27:10
281
原创 【C++算法】80.BFS解决FloodFill算法_岛屿数量
注意:要防止之前已经被标记过的元素重复标记,防止拐回去。一开始数组里面的初始元素。找完了再去找下一个连通块,同时。,和原始数组一样大,里面存放。,标记已经遍历过的数组。,后面每标记一次就把对应的。直接修改原数组(不推荐)题目答案是这么来的。
2025-07-29 23:26:02
325
原创 【C++算法】78.BFS解决FloodFill算法_算法简介
中文:洪水灌溉例如:下面的数组可以看成农田,数字代表深度,下雨了负数的就会被淹没。BFS和DFS实际上就是找出一些性质相同的连通块。DFS(深度优先搜索)例如:我先从右上角开始往下找,找到-12了发现左侧没有符合的,就返回之前的-10,查看-10的左侧有没有符合的。每次找不到的时候,扫描元素的上下左右。BFS(宽度优先搜索)例如:我先从右上角开始往下找,从-1的上下左右找符合的,一层一层的剥开。
2025-07-29 23:14:52
238
原创 【C++算法】77.优先级队列_数据流的中位数
前面一半数存在大根堆(left堆),后面一半数存在小根堆(right堆)已经有一堆有序的数了,就从后往前扫描,把插入的数插进他合适的位置。来一个数就sort一下。通过元素个数找到下标和下标值来求中位数。左边一半元素放到大根堆,堆顶元素就是左边最右侧的元素。右边一半元素放到小根堆,堆顶元素就是右边最左侧的元素。解法一:直接sort(会超时)解法二:插入排序思想(会超时)大小堆来维护数据流中的中位数。
2025-07-29 23:13:40
657
原创 【C++算法】72.队列+宽搜_二叉树的最大宽度
不过当我们相减之后,即使溢出,结果也是正确的。因为存储实际上是一个环,所以我们可以使用无符号整数来存储。解法一:硬来(会超时,因为可能会有3000个数的左右各1500个节点的最恶心的情况)这里的宽度指的是一层的最右边的非空节点到一层的最左边的非空节点,一共的节点数。仿照之前的层序遍历,把空节点也加进去。(要注意,遇到空节点要添加两个空孩子)解法二:利用数组存储二叉树的方式,给节点编号。宽度就是这个队列的队尾和队头相减再加一。也可以直接搞一个数组来模拟。注意细节:下标有可能会溢出。
2025-07-29 23:08:24
286
原创 【软件测试】论坛系统项目测试报告
本论坛系统是一个基于Spring Boot技术栈开发的现代化在线技术交流平台,采用前后端分离架构,后端使用Java开发,数据库采用MySQL 8.0+,支持高并发访问。系统集成了用户管理、多级版块、帖子发布、评论互动等核心功能,并采用Spring Security实现安全认证,JWT进行身份验证,确保系统安全可靠。项目采用模块化设计,便于功能扩展和二次开发,适用于技术社区、企业内网论坛、教育机构等多种场景,为用户提供专业、高效的技术交流环境。
2025-07-09 13:43:37
423
原创 【软件测试】4.自动化测试常见函数(4)
默认情况下等待所有的资源加载完成之后才能继续往下执行,但是实际上主页面加载完成之后我们就可以继续执行自动化,若一直等待的话可能会造成页面超时、元素找不到等问题…selenium无法识别非web的控件,上传文件窗口为系统自带,无法识别窗口元素。但是可以使用sendkeys来上传指定路径的文件,达到的效果是一样的。无头模式:无头模式:程序在后端运行,界面看不到页面的表现。点击文件上传的场景下会弹窗系统窗口,进行文件的选择。文件上传的html:upload.html。这个弹窗不是控件,无法识别窗口元素。
2025-07-09 13:42:17
323
原创 【软件测试】3.自动化测试常见函数(3)
实际在工作中,业务场景比较复杂时,要添加的自动化脚本非常多,通常来说自动化测试脚本数量可达到上百200个脚本,每个脚本添加若干个等待时间,假设平均等待时间为6秒。通常代码执行的速度比页面渲染的速度要快,如果避免因为渲染过慢出现的自动化误报的问题呢?隐式等待是一种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。无法等待弹窗,因为弹窗不是页面的元素,无法通过页面元素来定位到弹窗。优点:显示等待是智能等待,可以自定义显示等待的条件,操作灵活。显示等待可以等待隐式等待无法处理的问题。
2025-07-09 13:40:59
494
原创 【软件测试】2.自动化测试常见函数(2)
当自动化运行报错时,仅仅通过终端的错误提示给到的有用信息是一定的,若能将当时的页面变化截图拍下来,能更好的定位问题并解决问题”。通常情况下一般会打开两个标签页,实现标签页的切换测试,更多时候,直接输入对应页面的链接在当前标签页下进行测试。我们的自动化脚本一般部署在机器上自动的去运行,如果出现了报错,我们是不知道的,可以通过抓拍来记录当时的错误场景。由于图片给定的名称是固定的,当我们多次运行自动化脚本时,历史的图片将被覆盖。点击图片后出现的是一个新的标签页,自然获取不到新标签页的元素了。
2025-07-09 13:40:02
615
原创 【软件测试】1.自动化测试常见函数(1)
注意:文本和属性值不要混淆了。问题:是否可以通过 text 获取到“百度一下按钮”上的文字“百度一下”呢?如果判断获取到的元素对应的文本是否符合预期呢?获取元素对应的文本并打印一下~~适用场景:页面元素可点击跳转的情况下,用来检测跳转的结果是否是正确的。会将多次输入的内容拼接在一起,若想重新输入,需要使用清除方法。输入文本后又想换一个新的关键词,这里就需要用到 clear()这里的text为空,没有打印任何信息。点击元素Ctrl+f,出现下面的框框。获取文本信息: text。特殊情况:元素属性值。
2025-07-09 13:38:51
981
原创 【C++算法】70.队列+宽搜_N 叉树的层序遍历
然后出根节点1,入孩子节点2,3,4,然后统计根节点的孩子节点有3个。然后出2,入2的孩子节点5,6…直到3个孩子都出来。此时剩下来的4个元素就是最后一层节点。使用队列层序遍历就可以了。
2025-05-20 19:53:43
430
原创 【C++算法】68.栈_字符串解码
拿出来,就变成空串了,所以有个细节就是字符串的栈里面要先放入一个空串。,就直接放到栈顶元素的后面,因为没有右括号就不需要重复。然后就遇到第一个右括号了,把两个栈的栈顶拿出来,接着把bcbc放到原来栈顶元素的后面。两个栈,一个放字符串一个放数字。
2025-05-20 19:51:52
273
原创 【Linux】49.高级IO(3)
如果服务端写的代码是阻塞式的read, 并且一次只 read 1k 数据的话(read不能保证一次就把所有的数据都读出来,参考 man 手册的说明, 可能被信号打断), 剩下的9k数据就会待在缓冲区中.这种说法是不准确的. 我们定义的struct epoll_event是我们在用户空间中分配好的内存. 势必还是需要将内核的数据拷贝到这个用户空间的内存中的.epoll的高性能, 是有一定的特定场景的. 如果场景选择的不适宜, epoll的性能可能适得其反.另一方面, ET 的代码复杂程度更高了.
2025-05-20 19:47:09
1031
原创 【Linux】48.高级IO(2)
它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44)fdset的方式,poll使用一个pollfd不同与 的指针实现 select.使用三个位图来表示三个。它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路。按照man手册的说法: 是为处理大批量句柄而作了改进的poll.收集在epoll监控的事件中已经发送的事件.创建一个epoll的句柄.epoll的事件注册函数.
2025-05-20 19:45:26
1392
原创 【Linux】47.高级IO(1)
理解select模型的关键在于理解fd_set,为说明方便,取fd_set长度为1字节,fd_set中的每一bit可以对应一个文件描述符fd。任何IO过程中, 都包含两个步骤. 第一是等待, 第二是拷贝. 而且在实际的应用场景中, 等待消耗的时间往往都远远高于拷贝的时间. 让IO更高效, 最核心的办法就是让等待的时间尽量少。另外, 我们回忆在讲多进程多线程的时候, 也提到同步和互斥. 这里的同步通信和进程之间的同步是完全不想干的概念.(4)执行select(6,&set,0,0,0)阻塞等待。
2025-04-22 19:19:03
1065
原创 【Linux】46.网络基础(3.3)
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称.域名使用 . 连接com: 一级域名. 表示这是一个企业域名. 同级的还有 “net”(网络提供商), “org”(非盈利组织) 等.baidu: 二级域名, 公司名.www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于这样的格式, 来表示主机支持的协议.数据链路层数据链路层的作用: 两个设备(同一种数据链路节点)之间进行传递数据以太网是一种技术标准;
2025-04-22 19:18:00
1130
原创 【Linux】45.网络基础(3.2)
虽然我们在这里介绍ARP协议, 但是需要强调, ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议;MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制.使用ifconfig命令, 即可查看ip地址, mac地址, 和MTU;由于数据链路层MTU的限制, 对于较大的IP数据包要进行分包.ARP协议建立了主机 IP地址 和 MAC地址 的映射关系.对比理解 “数据链路层” 和 “网络层”还是 [唐僧例子之白龙马]MSS和MTU的关系。
2025-04-21 19:10:08
1180
原创 【Linux】44.网络基础(3.1)
8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要;我们知道, IP地址(IPv4)是一个4字节32位的正整数. 那么一共只有 2的32次方 个IP地址, 大概是43亿左右. 而TCP/IP协议规定, 每个主机都需要有一个IP地址.节点: 主机和路由器的统称;
2025-04-21 19:09:07
896
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人