- 博客(95)
- 收藏
- 关注
原创 算法学习入门---算法题DAY4
假设区间长度为下图所示,那么差值为 a3 - a1 + a3 - a2 + a4 - a3 + a5 - a3 + a6 - a3 = mid 左边元素个数*a[mid] - 左边元素之和 + 右边元素之和 - mid右边元素个数*a[mid]错误原因:能让一个点变为白色,白色的点选择哪一个,通过简单的dfs无法得到。代码思路是对的,但报了超时的错误,此时我们就可以考虑走其他算法了。3.滑动窗口:当操作数量<=k,进窗口;当操作数量>k,出窗口。1.贪心:选择差值越小的点越好 -> 排序。
2026-06-07 10:29:25
415
原创 算法学习入门---算法题DAY2
2.假设有even个偶数,odd个奇数。先排偶数,因为数组是1~n,所以必须得要是放一隔一,第一个数可以是even个当中挑一个,第二个数可以是(even-1)个当中挑一个,得到。1.数论知识:两数相乘,只要其中一者为偶数,那么结果一定为偶数。扩展到该题,就是不能让两个奇数相邻,不难想到用隔板法来解决。分别循环26个字符,并让每个字符都得出一个字符串操作最小值,比较各个最小值,找到最小的即为结果。3.现在天然形成了even+1个空,那么在even+1个空当中去填odd个数,则结果为。4.我有一个博丽灵梦。
2026-06-06 11:19:17
407
原创 算法学习入门---算法题DAY3
错误代码使用了bfs+动态规划的办法,假设结点一本来20的,对该节点的后续结点完成全部操作后,又被某一结点改为了30,那么最大值结果就乱套了。x 为奇数时,x = a*a 由于 a 必然是一个奇数(奇数*奇数才会为奇数),所以 a+1 为偶数。n*m = 奇数,则说明 n奇数m奇数,所以 n+m = 偶数,即 color = 0 为黑色。此时无论该完全平方数还能被拆分成什么数,都是两个奇数的状态,而 奇数+奇数 = 偶数。x为偶数时,由于无论怎么拆,都会多出来一个 1 没有数字和他配对,所以不能是好数。
2026-06-05 22:15:14
445
原创 算法学习入门---算法题DAY1
我最小要减到min,最大要增加到max,并且减到 min、max的过程中,形如 x - m 的牌也都被考虑进来了,所以有公式 (n-1)+(max-min)以上是我写的动规的超时代码,能看到时间复杂度达到了O(n^2),对于1e6的数据必然会超时,f[i][1] 表示用左脚走奇数级台阶到达 i 级台阶,f[i][0]表示用右脚,即左1右0。4.最后的价格即为:2^p*(n-q) + 2^(p+1)*q,即 2^q 价格的 (n-q) 件,2^q 价格的 q 件。
2026-05-21 23:19:21
343
原创 算法学习入门 --- 哈希表和unordered_map、unordered_set(C++)
本题需要注意的点是,AAC->CA & AAB->CA 代表两种不同的情况,如果出现了 CAA->AA 那么应该获得两对的结果而非一对。对于 6,1007,1007 这个数组来说,如果我们用hash[key] = key%7 作为哈希函数,那么三个数组元素的存储位置都是6,出现了存储位置的冲突。要打架了,就称为哈希冲突。该函数记作 hash(key) = addr,hash('b') = 'b' - 'a' 代表b这个key和a去相减后,数组存在下标为1处,那么就是映射关系和地址对应。
2026-01-22 17:12:23
596
原创 算法学习入门--- set与map(C++)
set不能存相同元素,multiset能存相同元素,存10个1前者只会存1个1,后者会存10个1,除此以外所有的函数功能相同。所以,set是具有去重的功能的创建格式:set<type> mp1size:返回实际元素个数empty:返回是否为空begin、end:可以使用for遍历整个set(红黑树),遍历时按照中序遍历来遍历的,根据红黑树的性质,遍历结果会是一个有序的序列;begin表示的是第一个元素的迭代器,end表示的是最后一个元素之后的迭代器,所以遍历范围为 [begin,end);
2026-01-07 20:10:34
1069
原创 算法学习入门---结构体和类(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
1197
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
967
原创 算法学习入门---二叉树
因为二叉树是一棵有序二叉树,所以可以直接用数组下标作为父节点,定义两个数组 l 和 r,分别表示为某一下标作为父节点的左孩子与右孩子,因为这样存储可以编号与元素一一对应,所以不需要e数组(元素数组)的辅助,同时也存储了结点与结点之间的关系(如果元素不是int型数据,可以再借助e数组的辅助,或者转换为可以一一对应的下标)使用时,dist[fa[x]] = dist[x]+1 表示父节点的到子节点的距离为子节点到子节点的子节点的距离+1,然后再把x更新为新的fa[x](即其父亲)
2025-12-15 22:42:59
819
原创 算法学习入门--- 树(C++)
上面的两种代码,前一种是以根左右的方式输出的,后一种是以根右左的方式输出的,这是由于建树时的不同导致的;vector数组建树是把元素直接进行尾插操作,所以先输入的元素(即左边的元素)dfs遍历的时候先遍历到;如下图所示,当A递归调用到了B以后,因为A也有可能是B的孩子,所以B也会递归调用到A,然后无穷无尽无止境也;问题在于,对于无根树那种父子关系不明确的树,无法肯定 BCD 和 A 的关系,那我们索性就把 ABCD 全都存储下来,即把结点与其相连的结点全都存储下来。
2025-12-12 17:59:45
683
原创 算法学习入门---queue(C++)
创建格式与stack一样size:返回队列中实际元素个数empty:返回队列是否为空push:入队pop:出队front:返回队头元素back:返回队尾元素以上所有函数的时间复杂度都为O(1)
2025-12-09 11:38:24
340
原创 算法学习入门---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
1206
原创 算法学习入门---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
979
原创 算法学习入门---vector(C++)
vector是c++ stl 库提供的一种动态顺序表容器,创建以及增删改查等逻辑已经实现完毕,被放在了类当中。
2025-11-24 16:34:56
1285
原创 算法学习入门---差分(C++)
差分与前缀和互为逆运算,前缀和是把[0,i-1]所有的元素相加起来得到一个sum,差分是把[0,i-1]区间的每个数减去前一个数(f[i]=a[i]-a[i-1]),然后对这一段区间所有元素进行某一统一操作,这个操作可以是加上某个数或减去某个数。
2025-11-20 00:18:21
981
原创 算法学习入门---枚举(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
1391
原创 算法学习入门---高精度(C++)
有时候,我们无法通过整型变量相加得出结果,比如100亿+200亿;所以高精度就是通过其他方式,来进行数值的相加;而高精度的解决就相当于小学学的竖式运算的代码实现。
2025-11-15 02:07:30
1178
原创 算法学习入门---模拟(C++)
当 - 号两边只差了1(例如d和e),那么直接把 - 号去掉就行;当 - 号两边为同一个字符,那么直接原封不动地输出 - 号;如果 - 号左边的字符大于右边的字符,也是直接输出 - 号;当不为 - 号,直接输出即可,因为需要修改填充的只有 - 号;当 - 号出现在字符串开头和结尾,直接输出。小写字母变大写字母,减去32号即可(a的asc码为97,A的asc码为65)一项一项输出,每一项输出关心3个部分:符号+系数+次数。请注意,x的次数为1时,是不需要加上 ^1 的!如何输出占用3个字符的数字?
2025-11-13 22:19:35
1133
原创 软考中级软件设计师(下午题)--- 设计模式C++实现
observers是一个指针数组,it是一个迭代器指针,所以使用时应该是先对迭代器指针解引用,即 *it 然后再对指针进行使用,Observer 类当中只有一个函数,那么猜测大概率就是要使用该函数了;与该题的第2问同理,CurrentConditionsDisplay指的是类图中的ConcreteObserver,有register interest,即 registerObserver 函数,这个函数在subject类当中,所以要调用envData 成员变量,即。具体的区别如下,有点像变量与指针的关系。
2025-11-08 03:10:05
1077
原创 软考中级软件设计师(下午题)--- 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
1007
原创 软考中级软件设计师(上午题)
所以直接地址索引为 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
1253
原创 算法学习入门---二分查找(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
813
原创 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
996
原创 算法学习入门---双指针(C++)
目录1.洛谷——UVA11572唯一的雪花2.洛谷——逛画展3.牛客网——字符串4.牛客网——丢手绢代码:2.洛谷——逛画展代码:3.牛客网——字符串代码:4.牛客网——丢手绢如下图所示,n个小朋友围成一个圈,相邻小朋友之间距离不定,现求两个小朋友之间最远距离(可以是相邻也可以是非相邻)图1图2代码:
2025-10-21 19:25:58
339
原创 leetcode二分查找(C++)
特点:细节最多,最容易写出死循环的算法该算法除了数组有序的情况外,数组无序但是元素有规律也可以使用二分查找可以有模板,但千万不要死记硬背,理解怎么用什么时候用才是关键……代表每道题都会有微小的差异,要视情况而定模板1:朴素的二分模板模板2:查找左边界的二分模板模板3:查找右边界的二分模板记忆方法:下减1上加1,否则就在中间加1何为二段性?数组中一段数据全都满足特性1,另一段数据全都满足特性2,且特性1≠特性2,这就是二段性;
2025-10-11 23:15:01
917
原创 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
770
原创 自动化测试篇--用例篇
然后每次用户输入密码之后,就会先将密码通过同一加密算法转换成乱码,然后去比对是否和用户表里的乱码一致,这也就是为什么用户忘记密码以后,必须要重新设置一个密码,而不能直接获得原始密码(原始密码已经变成乱码了)还有(6,15)的数字范围,边界值为6、15(无效),次边界值为7,14(有效)最简单的正交表是L4(2^3),其中4为行号(每列有4行),L为正交表,3为因素数(即只存在列号1、列号2和列号3),2为水平数(即最大的表中数值只会到2,不是指行号、列号)是用特殊的,非常规的需要一定专业知识的方法来测试;
2025-09-25 23:11:52
260
原创 自动化测试篇--BUG篇
⼯作中开发⼈员通常需要按照bug的级别来分配 优先级来处理bug,除此之外,通过bug级别也能够体现出开发⼈员的开发质量。测试⼈员在执⾏测试的过程中如有发现bug,需要在对应的bug管理平台来创建bug(bug⽣命起 源),创建好的bug需要被开发⼈员修复,以及测试⼈员的持续跟踪和测试。该描述下,没有明确说明哪个浏览器,失败的具体表现是什么,对于开发⼈员来说⽆法捕捉到更多有效的信息,会造成沟通效率低下,⼯作质量低下等问题。如果时间急迫,bug又是次要级别的时候,可以和无效bug同样的处理方式。
2025-08-07 17:21:19
766
原创 自动化测试篇--概念篇
目录一.前情回顾二.什么是需求?三.开发模型四.测试模型测试的概念:验证软件的特性是否满足用户的需求,即提升用户使用的满意度目前纯测试开发岗位几乎没多少,主要还是集中在了软件测试开发(软件测试、自动化测试、性能测试等……)测开岗还需要在完成业务测试后,完成一些技术事务;如果说调试是在发现并解决问题(死循环怎么出现的?栈溢出哪个函数导致的?),那么测试就是贯穿整个程序生命周期(白盒and黑盒……),为软件的精益求精而去发现问题对于测试人员来说,设计测试用例是工作中必不可少的一环,这也是测试岗位面试中必不可少的
2025-08-01 17:05:30
1016
原创 自动化测试篇--测试初识
不同点: 测试开发⽐测试多“开发”⼆字,⽽这个开发并不是指业务开发,因为业务开发是开 发⼈员的主要职责,这⾥的开发指的是需要开发测试效率⼯具,通过效率⼯具来提升测试效率和测试质量,⽐如我们的⾃动化、性能测试等就属于效率⼯具。例如下面的python代码,我们可以先用(10,2)这种简单的进行测试,发现测试结果没有问题。不同的企业对于测试的命名不同,不管是测试⼯程师、功能测试、移动端测试、客⼾端测试等等都是 测试岗位,性质要么是测试⼯程师,要么是测试开发⼯程师。然后每个单元测试通过以后,再合起来一块测试。
2025-07-25 17:55:42
650
原创 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
1436
原创 Linux权限
权限本质:能或不能做某件事,权限 = 角色 + 目标权限属性权限用途:1.限制角色 2.目标必须要有具体的权限属性(e.g. 读属性or写属性)角色:1.拥有者 2.所属组 3.other上图中,前一个root为拥有者,后一个root为所属组;拥有者、所属组都是指某种角色,root是该角色下的用户名称(角色 -> 学校校长,用户名称 -> 张三,联系即 学校校长 -> 张三)疑问1:为什么不见other呢?
2025-06-20 16:26:41
925
原创 UDP/TCP协议全解
同时,UDP是通过UDP首部中设置目的端口号来寻找目标主机,然后对目的端口的所有主机进行数据传输(TCP也是通过目的端口寻找目标主机,但找到一众目标主机后只能与其中之一进行连接),所以可以通过端口号一次性找到多台目标主机(如下图,主机A要向目的网络的所有端口为711的主机发送消息)此时数据相加的结果,与取反以后的检验和相加,应该正好为全1(数据为0的地方,检验和肯定为1;如果缓冲区域大小为3000字节,那么滑动窗口大小为3000字节,当被占满以后处理了2000字节,此时的滑动窗口大小为2000字节。
2025-06-01 23:29:57
1526
原创 Linux基本指令/下
你看上了⼩花,但是有不好意思直接表⽩,那就让你你家⼈找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆(对应外壳程序统称)转达你的意思给⼩花,⽽我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使⽤的bash(一个具体的外壳程序,bash是其中之一)。该目录保存的是各个用户的显示器输出文件,0代表的是第一位连接上服务器的用户的输出文件,1代表第二位;,在对某个文件进行完某一个操作以后,会把操作完的文件递交到管道后所跟的操作,然后进行一步一步的操作,最后输出最后所有操作结束以后的内容。
2025-05-31 23:19:33
2180
原创 Linux基本指令/上
一些常见的快捷键:alt + enter 全屏切换ctrl + shift + c 复制ctrl + shift + v 黏贴ctrl + c 终止操作(出现异常情况时,可以不断使用该快捷键让其停止下来)一些常用的功能代码:pwd 打印所处的路径clear 清屏whoami 打印用户名。
2025-05-28 16:16:44
1073
原创 Linux环境搭建
Linux不同版本技术向版本:内核版本商业向版本:ubuntu、kail、centos/redhat等……内核版本名称所传递出的信息,假设有下面centos操作系统的版本号3:主版本号 对应centos710:次版本号,如果是偶数代表的是稳定版本,如果是奇数代表的是测试版本(release、debug的区别)0:修订次数,代表版本发布后,bug出现后的修订次数957.21.3:补丁编号,指的是版本推出以后为了优化所打的补丁。
2025-05-28 15:11:12
785
原创 mySQL复习(中)
视图类似于把我们查询出来的结果保存下来,并把结果创建出一张新表格式:SELECT ……BEGINEND $$DELIMITER;存储过程指的是将某一段select过程存储下来,而不是数据库要通过硬件存储什么内容;存储过程我们可以视作是创建一个函数,函数体是对数据库进行增删改查CREATE PROCEDURE get_clients(): 将一个select过程存储起来,封装成一个名为 get_clients() 的函数(函数可以有参数)BEGIN END :两个关键字之间的内容为函数体。
2025-05-26 11:15:41
1047
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅