- 博客(88)
- 收藏
- 关注
原创 算法学习入门---结构体和类(C++)
sort函数有3个参数,起始位置、终止位置和bool类型的排序函数排序函数默认为less函数(升序排序),可以切换成greater函数,sort的less、greater函数()不能省,priority_queue的less、greater函数()必须省排序函数接收两个参数(每次用来比较的2个参数),并返回一个布尔值。排序函数的2个参数一开始的位置为第一个在前,第二个在后。排序函数为true时,参数位置不变;为false时,参数进行位置交换return x>y;int main()
2025-12-23 18:49:52
980
1
原创 算法学习入门---priority_queue(C++)
priority_queue在queue头文件中,除了具有了顺序排列特性以外,常用函数有pop、push、top、empty与size函数,函数用法与其他数据结构大致一样表示创建出一个大根堆(默认为大根堆)创建大根堆的完整格式创建小根堆的完整格式记忆方式:不同于sort函数中使用less、greater模板,堆的创建当中小根堆用大于(greater),大根堆用小于(less)结构体类型创建堆:要求:结构体中有a、b、c三个变量,要求根据b的大小来创建堆。
2025-12-17 21:54:25
906
原创 算法学习入门---二叉树
因为二叉树是一棵有序二叉树,所以可以直接用数组下标作为父节点,定义两个数组 l 和 r,分别表示为某一下标作为父节点的左孩子与右孩子,因为这样存储可以编号与元素一一对应,所以不需要e数组(元素数组)的辅助,同时也存储了结点与结点之间的关系(如果元素不是int型数据,可以再借助e数组的辅助,或者转换为可以一一对应的下标)使用时,dist[fa[x]] = dist[x]+1 表示父节点的到子节点的距离为子节点到子节点的子节点的距离+1,然后再把x更新为新的fa[x](即其父亲)
2025-12-15 22:42:59
769
原创 算法学习入门--- 树(C++)
上面的两种代码,前一种是以根左右的方式输出的,后一种是以根右左的方式输出的,这是由于建树时的不同导致的;vector数组建树是把元素直接进行尾插操作,所以先输入的元素(即左边的元素)dfs遍历的时候先遍历到;如下图所示,当A递归调用到了B以后,因为A也有可能是B的孩子,所以B也会递归调用到A,然后无穷无尽无止境也;问题在于,对于无根树那种父子关系不明确的树,无法肯定 BCD 和 A 的关系,那我们索性就把 ABCD 全都存储下来,即把结点与其相连的结点全都存储下来。
2025-12-12 17:59:45
625
原创 算法学习入门---queue(C++)
创建格式与stack一样size:返回队列中实际元素个数empty:返回队列是否为空push:入队pop:出队front:返回队头元素back:返回队尾元素以上所有函数的时间复杂度都为O(1)
2025-12-09 11:38:24
289
原创 算法学习入门---stack(C++)
int main()//先将 1~10 进栈i<=10;while(!st.empty())//也可以写成st.size()st.pop();return 0;stack是c++ stl 库当中的一种模板,是实现了栈的功能。初始化:stack<size> stack_namepush:入栈pop:出栈top:返回栈顶元素empty:为空栈返回true,非空返回falsesize:返回栈内元素个数。
2025-12-08 11:15:42
1152
原创 算法学习入门---list与算法竞赛中的链表题(C++)
cout<<endl;i<=5;i<=5;i<=5;return 0;list 是 c++ stl 库中提供的动态链表模板,主要有以下几个函数功能初始化:list<size> list_namepush_back:尾插pop_back:尾删push_front:头插pop_front:头删。
2025-12-01 23:20:36
931
原创 算法学习入门---vector(C++)
vector是c++ stl 库提供的一种动态顺序表容器,创建以及增删改查等逻辑已经实现完毕,被放在了类当中。
2025-11-24 16:34:56
1213
原创 算法学习入门---差分(C++)
差分与前缀和互为逆运算,前缀和是把[0,i-1]所有的元素相加起来得到一个sum,差分是把[0,i-1]区间的每个数减去前一个数(f[i]=a[i]-a[i-1]),然后对这一段区间所有元素进行某一统一操作,这个操作可以是加上某个数或减去某个数。
2025-11-20 00:18:21
861
原创 算法学习入门---枚举(C++)
但是 a[n] = b[n-1] - b[1] - b[0],b[n] 会被跳过判断,如下图2所示,因为b[n]没有被判断,所以会得出错误结果(该方案可行)例如 4 个数的数组,1。0111 代表3个下标对应值都要加进子集中,i 为 0 时该结果为1,i 为 1 时该结果为 1,i 为 2 时该结果为1,所以3个下标对应值都判断到了。以下图1为例(状态是10111,按法是00100),我们就是要把按的那个位置,以及他的上下左右四个位置从0变成1,从1变成0,我们不难想到异或就能够有这样的特性。
2025-11-18 12:00:15
1305
原创 算法学习入门---高精度(C++)
有时候,我们无法通过整型变量相加得出结果,比如100亿+200亿;所以高精度就是通过其他方式,来进行数值的相加;而高精度的解决就相当于小学学的竖式运算的代码实现。
2025-11-15 02:07:30
1094
原创 算法学习入门---模拟(C++)
当 - 号两边只差了1(例如d和e),那么直接把 - 号去掉就行;当 - 号两边为同一个字符,那么直接原封不动地输出 - 号;如果 - 号左边的字符大于右边的字符,也是直接输出 - 号;当不为 - 号,直接输出即可,因为需要修改填充的只有 - 号;当 - 号出现在字符串开头和结尾,直接输出。小写字母变大写字母,减去32号即可(a的asc码为97,A的asc码为65)一项一项输出,每一项输出关心3个部分:符号+系数+次数。请注意,x的次数为1时,是不需要加上 ^1 的!如何输出占用3个字符的数字?
2025-11-13 22:19:35
1084
原创 软考中级软件设计师(下午题)--- 设计模式C++实现
observers是一个指针数组,it是一个迭代器指针,所以使用时应该是先对迭代器指针解引用,即 *it 然后再对指针进行使用,Observer 类当中只有一个函数,那么猜测大概率就是要使用该函数了;与该题的第2问同理,CurrentConditionsDisplay指的是类图中的ConcreteObserver,有register interest,即 registerObserver 函数,这个函数在subject类当中,所以要调用envData 成员变量,即。具体的区别如下,有点像变量与指针的关系。
2025-11-08 03:10:05
979
原创 软考中级软件设计师(下午题)--- UML建模
用户通过了操作仿真系统中的机器人来探索虚拟世界,系统中共有2个主要功能,分别是机器人探索虚拟世界(Run Robots)与手动控制机器人(Manipulate Robots),所以U1、U2分别为Run Robots与Manipulate Robots。U5为U4的扩展关系,把U4、U5的组合看作是创建地址簿这一行为整体用例,那么打开地址簿就不对了(没有地址簿打开什么);一件商品可以有多个促销活动(淘宝里,商品A和不同种类商品搭配一起买,促销力度不一样),也可以完全没有促销,所以(3)为 0…
2025-11-07 18:56:04
825
原创 软考中级软件设计师(上午题)
所以直接地址索引为 0~4 ,一级间接地址索引为 5~(5 + 2*256 -1 = 516),二级间接地址索引为 517~(517+256*256-1 = 66052),可表示的地址范围为 0~66052(即66053个地址),每个数据块大小为1KB,所以最大长度是 1*66053 KB。21.以第一个元素为根节点,比它小的放左边,比它大的放右边。目标代码生成阶段是编译的最后一个阶段,编译是把高级语言转换为接近机械语言的汇编代码(目标代码),最后生成一个目标程序(.o 文件,里面放着很多的汇编代码)。
2025-11-07 15:07:02
1176
原创 算法学习入门---二分查找(C++)
二分答案:与上题解题思路大致相同,假设 h 表示当前电锯高度,c 表示当伐木机高度为 x 时能切出来的厘米数,则 h 与 c 成反比;所以 c >= M 时,h 在左区间,c < M 时,h 在右区间;对 [0,maxlen] 区间的值进行二分查找,maxlen 为最长的树木长度根据上题的模板,只要把caculator函数稍微修改一下,就能够ac掉这道题了注:本题数据大小会比较大,因此需要 #define int long long + signed main。
2025-11-04 19:09:36
745
原创 leetcode前缀和(C++)
如同一维数组前缀和,二维数组前缀和也需要设计出一个dp表dp[i][j]:从 [1,1] 位置到 [i,j] 位置,该段区间内所有元素的和如下图所示,我们将 dp[i][j] 区间内划分为4个部分,dp[i][j] = A + B + C + DD和A都比较好表示,分别是 arr[i][j] 和 dp[i-1][j-1],但是B、C无法用已有的内容进行表示,所以我们可以转换一下表达式,改为 dp[i][j] = (A + B) + (A + C) + D - A。
2025-11-03 20:35:35
952
原创 算法学习入门---双指针(C++)
目录1.洛谷——UVA11572唯一的雪花2.洛谷——逛画展3.牛客网——字符串4.牛客网——丢手绢代码:2.洛谷——逛画展代码:3.牛客网——字符串代码:4.牛客网——丢手绢如下图所示,n个小朋友围成一个圈,相邻小朋友之间距离不定,现求两个小朋友之间最远距离(可以是相邻也可以是非相邻)图1图2代码:
2025-10-21 19:25:58
301
原创 leetcode二分查找(C++)
特点:细节最多,最容易写出死循环的算法该算法除了数组有序的情况外,数组无序但是元素有规律也可以使用二分查找可以有模板,但千万不要死记硬背,理解怎么用什么时候用才是关键……代表每道题都会有微小的差异,要视情况而定模板1:朴素的二分模板模板2:查找左边界的二分模板模板3:查找右边界的二分模板记忆方法:下减1上加1,否则就在中间加1何为二段性?数组中一段数据全都满足特性1,另一段数据全都满足特性2,且特性1≠特性2,这就是二段性;
2025-10-11 23:15:01
858
原创 leetcode滑动窗口(C++)
一开始,left和right都指向第一个元素,因为第一个元素为c,此时p中也有一个c,所以2个c就相当于可以抵消掉,此时可以把 s 中的第一个元素当作有效元素,count++;本题是基于上题的进阶,(以例一为例)可以把foo视为a,把bar视为b,其他的就小写字母表中的顺序排列,那么题目就变成了从 "bacabd" 中找出 "ab" 的异位词子串。第一次判断时,直接从 s 中划出 p 字符个数的子串,然后窗口一进一出就可以确保两个字符串的字符个数肯定相同(相当于把窗口整体往右移动一格,如下图所示)
2025-10-07 23:19:24
682
原创 自动化测试篇--用例篇
然后每次用户输入密码之后,就会先将密码通过同一加密算法转换成乱码,然后去比对是否和用户表里的乱码一致,这也就是为什么用户忘记密码以后,必须要重新设置一个密码,而不能直接获得原始密码(原始密码已经变成乱码了)还有(6,15)的数字范围,边界值为6、15(无效),次边界值为7,14(有效)最简单的正交表是L4(2^3),其中4为行号(每列有4行),L为正交表,3为因素数(即只存在列号1、列号2和列号3),2为水平数(即最大的表中数值只会到2,不是指行号、列号)是用特殊的,非常规的需要一定专业知识的方法来测试;
2025-09-25 23:11:52
165
原创 自动化测试篇--BUG篇
⼯作中开发⼈员通常需要按照bug的级别来分配 优先级来处理bug,除此之外,通过bug级别也能够体现出开发⼈员的开发质量。测试⼈员在执⾏测试的过程中如有发现bug,需要在对应的bug管理平台来创建bug(bug⽣命起 源),创建好的bug需要被开发⼈员修复,以及测试⼈员的持续跟踪和测试。该描述下,没有明确说明哪个浏览器,失败的具体表现是什么,对于开发⼈员来说⽆法捕捉到更多有效的信息,会造成沟通效率低下,⼯作质量低下等问题。如果时间急迫,bug又是次要级别的时候,可以和无效bug同样的处理方式。
2025-08-07 17:21:19
715
原创 自动化测试篇--概念篇
目录一.前情回顾二.什么是需求?三.开发模型四.测试模型测试的概念:验证软件的特性是否满足用户的需求,即提升用户使用的满意度目前纯测试开发岗位几乎没多少,主要还是集中在了软件测试开发(软件测试、自动化测试、性能测试等……)测开岗还需要在完成业务测试后,完成一些技术事务;如果说调试是在发现并解决问题(死循环怎么出现的?栈溢出哪个函数导致的?),那么测试就是贯穿整个程序生命周期(白盒and黑盒……),为软件的精益求精而去发现问题对于测试人员来说,设计测试用例是工作中必不可少的一环,这也是测试岗位面试中必不可少的
2025-08-01 17:05:30
986
原创 自动化测试篇--测试初识
不同点: 测试开发⽐测试多“开发”⼆字,⽽这个开发并不是指业务开发,因为业务开发是开 发⼈员的主要职责,这⾥的开发指的是需要开发测试效率⼯具,通过效率⼯具来提升测试效率和测试质量,⽐如我们的⾃动化、性能测试等就属于效率⼯具。例如下面的python代码,我们可以先用(10,2)这种简单的进行测试,发现测试结果没有问题。不同的企业对于测试的命名不同,不管是测试⼯程师、功能测试、移动端测试、客⼾端测试等等都是 测试岗位,性质要么是测试⼯程师,要么是测试开发⼯程师。然后每个单元测试通过以后,再合起来一块测试。
2025-07-25 17:55:42
615
原创 windows server 2022 模拟实现 IPSec 技术
此时在主机A和主机B之间建立了一个共享密钥的IpSec安全通道,他们 之间能正常ping通并进行所有访问,如web、FTP访问,而其他机器如主机C则不能访问主机A和B提供的任何服务,从而可以保证主机A和B 在公网上传输数据的安全。此时如果另一台主机(下称主机B)与该主机(下称主机A)互相之间ping不通,说明防火墙拦截了,此时去到控制面板的系统安全关闭防火墙即可。将源地址、目标地址都设置为一个特定的IP地址或子网,然后源地址即主机A的ip地址,目标地址为主机B的ip地址。
2025-06-23 18:12:59
1268
原创 Linux权限
权限本质:能或不能做某件事,权限 = 角色 + 目标权限属性权限用途:1.限制角色 2.目标必须要有具体的权限属性(e.g. 读属性or写属性)角色:1.拥有者 2.所属组 3.other上图中,前一个root为拥有者,后一个root为所属组;拥有者、所属组都是指某种角色,root是该角色下的用户名称(角色 -> 学校校长,用户名称 -> 张三,联系即 学校校长 -> 张三)疑问1:为什么不见other呢?
2025-06-20 16:26:41
903
原创 UDP/TCP协议全解
同时,UDP是通过UDP首部中设置目的端口号来寻找目标主机,然后对目的端口的所有主机进行数据传输(TCP也是通过目的端口寻找目标主机,但找到一众目标主机后只能与其中之一进行连接),所以可以通过端口号一次性找到多台目标主机(如下图,主机A要向目的网络的所有端口为711的主机发送消息)此时数据相加的结果,与取反以后的检验和相加,应该正好为全1(数据为0的地方,检验和肯定为1;如果缓冲区域大小为3000字节,那么滑动窗口大小为3000字节,当被占满以后处理了2000字节,此时的滑动窗口大小为2000字节。
2025-06-01 23:29:57
1442
原创 Linux基本指令/下
你看上了⼩花,但是有不好意思直接表⽩,那就让你你家⼈找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆(对应外壳程序统称)转达你的意思给⼩花,⽽我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使⽤的bash(一个具体的外壳程序,bash是其中之一)。该目录保存的是各个用户的显示器输出文件,0代表的是第一位连接上服务器的用户的输出文件,1代表第二位;,在对某个文件进行完某一个操作以后,会把操作完的文件递交到管道后所跟的操作,然后进行一步一步的操作,最后输出最后所有操作结束以后的内容。
2025-05-31 23:19:33
2118
原创 Linux基本指令/上
一些常见的快捷键:alt + enter 全屏切换ctrl + shift + c 复制ctrl + shift + v 黏贴ctrl + c 终止操作(出现异常情况时,可以不断使用该快捷键让其停止下来)一些常用的功能代码:pwd 打印所处的路径clear 清屏whoami 打印用户名。
2025-05-28 16:16:44
1036
原创 Linux环境搭建
Linux不同版本技术向版本:内核版本商业向版本:ubuntu、kail、centos/redhat等……内核版本名称所传递出的信息,假设有下面centos操作系统的版本号3:主版本号 对应centos710:次版本号,如果是偶数代表的是稳定版本,如果是奇数代表的是测试版本(release、debug的区别)0:修订次数,代表版本发布后,bug出现后的修订次数957.21.3:补丁编号,指的是版本推出以后为了优化所打的补丁。
2025-05-28 15:11:12
743
原创 mySQL复习(中)
视图类似于把我们查询出来的结果保存下来,并把结果创建出一张新表格式:SELECT ……BEGINEND $$DELIMITER;存储过程指的是将某一段select过程存储下来,而不是数据库要通过硬件存储什么内容;存储过程我们可以视作是创建一个函数,函数体是对数据库进行增删改查CREATE PROCEDURE get_clients(): 将一个select过程存储起来,封装成一个名为 get_clients() 的函数(函数可以有参数)BEGIN END :两个关键字之间的内容为函数体。
2025-05-26 11:15:41
1020
原创 排序复习/下(C语言版)
3.cur从找大变成找小,大的cur往后走prev不动(由于每次肯定cur先走,所以prev的限制是比较容易的),找到小的让prev先++,然后进行位置交换,此时就类似于把大于key的值翻滚往后移动。2.left、right位置的值已经交换过数对,right不断找小一直没找到,与left相遇后由于前一次left、right(新一次找小开始的位置)的交换,当前left所指向的值依旧小于key值。4.需要创建一个temp数组进行排序(例如2个数的区间,小的先放进temp,再放大的,自然排序完成了。
2025-05-19 23:57:44
1239
原创 排序复习/上(C语言版)
排序思想:以上图为例,先把end下标后面一个元素(假设为tmp)保存下来,然后依次比较end下标元素和tmp大小,如果不合适就把从end往后覆盖1位,直到tmp到了合适的位置,把保存下来的值覆盖原来end+1下标元素(这样end+1下标元素才不会在数组中重复两次)最后一次排序(gap == 1),每个数都跳得很慢,但基本上都不怎么需要动了,都可以break掉。最坏情况下第一趟预排序的消耗:逆序,(1+2)* n / 3 = n (每组的当中元素向前移动1位,后一个元素向前移动2位,总共有n/3组)
2025-05-19 23:18:15
1107
原创 二叉树复习(C语言版)
前序:根 左子树 右子树(先访问根结点,再访问左子树,再访问右子树)中序:左子树 根 右子树(先访问左子树,再访问根节点,再访问右子树)后序:左子树 右子树 根(先访问左子树,再访问右子树,再访问根节点)需要进行遍历的二叉树如上图所示。前序遍历就是把一整棵树看成是根节点+左子树+右子树,然后再把左子树的根节点看作是根节点+左子树+右子树(这也是为什么用递归来解决三种二叉树遍历),直到左右子树都为NULL时,往上返回。中序遍历、后序遍历就是访问的顺序更改了,依旧是有异曲同工之妙的。
2025-05-14 13:34:04
881
原创 leetcode二叉树相关题目复习(C语言版)
判断根节点、左节点与右节点的值是否相等,因为正向判断(即判断三值相等返回true)比较麻烦(不能根节点满足条件直接返回true,还需进行左右子树的判断),因此可以通过正难则反的思想,判断哪些情况不是单值二叉树。判断对称的办法:和判断相同类似,唯一的区别在于递归调用时,左子树和右子树进行比较,右子树和左子树进行比较(这边的左右子树指的是a、b子树的根节点后面所连接的左右子树)当左右子树的根节点相等时,可以通过判断以改根节点为子树的与subRoot是否相等,来判断在整棵树中是否存在subRoot一样的树。
2025-05-14 13:09:41
961
原创 堆复习(C语言版)
1.堆---数据结构---C++stl库中的priority_queue2.堆排序3.topK问题4.堆排序、topK的时间复杂度问题。
2025-05-12 22:53:48
1226
原创 二叉树遍历(C语言版)
左子树可以通过root->left = Create(s, i)得到,右子树可以通过root->right = Create(s, i)得到,创建完整棵树(子树)以后,返回root(整棵树/整棵子树的根节点);由于递归的特性,这边得到的不是单一左节点or右节点,而是一整个子树。此处需要注意的是,在主函数传参时,要传下标的地址,不然递归时会出现下标没有被保存下来的情况。把每个结点看作是子树的根节点,以根左右的顺序创建一整棵二叉树。前序遍历创建树,中序遍历把创建出来的二叉树的结点打印出来。
2025-04-27 21:02:29
317
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅