自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 收藏
  • 关注

原创 三、传输层拥塞控制、差错控制

传输服务和协议:为运行在不同主机上的应用进程提供逻辑通信;传输协议运行在端系统-发送方:将应用层的报文分成报文段,然后传递给网络层;接收方:将报文段重组成报文,然后传递给应用层;有多个传输层协议可供应用选择;网络层服务:主机之间的逻辑通信传输层服务:进程间的逻辑通信——依赖于网络层的服务:延时、带宽。并对网络层的服务进行增强可靠的、保序的传输:TCP-多路复用、解复用-拥塞控制-流量控制-建立连接不可靠的、不保序的传输:UDP-多路复用、解复用。

2024-03-17 22:38:21 831

原创 蓝桥杯(续代码随想录打卡)

2024.3.6题目就是类似于消消乐,最后至少能剩多少,那理想状态下肯定希望两部分刚好相等,那就全部消完了,也就是说,我们希望一部分能刚好组成sum/2,换句话说,就看sum/2能达到的最大极限是什么,这是不是跟01背包有点像,这里就看sum/2的背包最大装多少?

2024-03-13 19:20:29 875

原创 二、应用层

可能用的应用架构:1.C/S模式:用户增加,性能断崖式下降2.P2P体系结构3.混合体进程—在主机上运行的应用程序在同一个主机内,使用进程间通信机制通信(操作系统)不同主机,通过交换报文(Message)来通信:客户端发起通信得进程,服务器等待连接进程。P2P架构中也有客户端与服务器进程之分。Q1:进程标识和寻址问题(服务用户)Q2:传输层-应用层提供服务时如何(服务)位置:层间界面得SAP形式:应用程序接口API。

2024-03-13 09:48:46 830

原创 计网(复习)黑书

节点:主机=端系统,及其运行的应用程序;路由器、交换机等网络交换设备边:通信链路(同轴电缆、光纤、无线电、卫星;传输速度=带宽(bps));接入网链路-主机连接到互联网的链路;主干链路-路由器之间的链路协议:控制发送、接受消息(TCP、UDP、IP、HTTP、FTP);协议定义了两个或多个通信实体之间交换得报文格式和次序,以及在报文传输和/或接受或其他实际事件方面采取的动作互联网标准标准:RFC、IETF使用通信设施进行通信得分布式应用;通信基础设施为apps提供编程接口(通信服务)

2024-03-07 16:20:39 842

原创 C++类简要概括

封装是C++面向对象三大特征之一。将属性和行为作为一个整体;设计类的时候,属性和行为写在一起。访问权限有三种:public:类内可以访问,类外可以访问private:类内可以访问,类外不可以访问,子类不可以访问父类私有内容protected:类内可以访问,类外不可以访问,子类可以访问父类保护内容struct默认权限是公有,class默认权限是私有。

2024-02-22 19:08:36 919 1

原创 计网day6

七 应用层7.1 网络应用模型7.2 DNS系统7.3 文件传输协议FTP7.4 电子邮件7.5 万维网和HTTP协议

2024-02-20 18:53:40 322

原创 计网day5

5. 服务器(1031)给客户端(2023)发送TCP报文段, seq=y, ack=x+1, ACK=1;此时处于半关闭状态,因为还有一些数据没有发送完毕。6. 服务器(1031)给客户端(2023)发送TCP报文段, seq=z, ack=x+1, FIN=1;此时全关闭,所有数据传送完毕,申请断开连接。7. 客户端(2023)给服务器(1031)发送TCP报文段, seq=x+1, ACK=1;4. 客户端(2023)给服务器(1031)发送TCP报文段, seq=x, ack=y, FIN=1;

2024-02-20 17:59:49 437

原创 计网day4

无分类编址CIDR:ARP协议:DHCP协议:ICMP协议:OSPF协议及链路状态算法:BGP协议:

2024-02-19 20:29:20 387

原创 计网day3

停止-等待协议:后退N帧协议(GBN)选择重传协议(SR):ALOHA协议:CSMA协议:CSMA/CD协议:CSMA/CA协议:轮询访问介质访问控制:以太网:无线局域网:VLAN的基本原理:PPP协议:HDLC协议:

2024-02-15 21:32:28 324

原创 计网day2

物理接口特性: 物理层解决如何连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。

2024-02-13 18:06:13 377

原创 计网day1

RTT:往返传播时延(越大,游戏延迟)

2024-02-11 12:36:58 1112

原创 day 43动态规划(5)

所以递推公式:dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);dp[i][j] 可以由前一个strs里的字符串推导出来,strs里的字符串有zeroNum个0,oneNum个1。dp[i][j] 就可以是 dp[i - zeroNum][j - oneNum] + 1。dp[i][j]:最多有i个0和j个1的strs的最大子集的大小为dp[i][j]。然后我们在遍历的过程中,取dp[i][j]的最大值。本题是一道01背包问题。

2024-01-10 12:37:08 374

原创 day42 动态规划(4)

首先,该dp数组是一个二维数组。

2024-01-09 12:27:06 373

原创 day41 动态规划(3)

3. 从左往右,大树需要小树的值。这道题主要中间递归公式不会写。4. 初始化最开始两个的值。

2024-01-08 12:22:32 399

原创 day39 动态规划(2)

这道题递归五部曲跟上面一样,不过加了障碍物,如果该点是障碍物,那就不能通过,也就是dp数组为0,就是我们定义dp数组的值,因此就想明白了,遍历的时候,如果对应障碍物数组为1,也就是该点为障碍物,直接忽略就好了,一个if语句简简单单,不过需要特殊考虑障碍物的位置,比如起始点跟终止点,这两个位置如果有障碍物,则就没办法通过,直接返回0。

2024-01-07 13:36:17 352

原创 day 38 动态规划(1)

经典的动态规划入门第一题,直接递归五部曲,这道题初始化开始没有弄清楚。

2024-01-06 14:41:05 335

原创 day37贪心(6)

所以整体要减小,现在的变动无非就是a和b变大变小的问题,如果a不动,b再怎么变也不行啊,a增大就更扯了,因此结论,a是一定要减小的!因为要找最大的,所以,a减小1就好,那么,a减小后,b呢?所以b直接为9就好,一定满足ab,因为我们找的是。

2024-01-04 20:36:42 338

原创 day 34(补)贪心(3)

但注意,两次遍历方向是有说法的,比如,如果先处理右大于左,那么每次对比,就要保证左边是不变的,也就是已经处理过的,因此遍历顺序正常从左往右,但是第二步处理左大于右,此时如果正常从左往右遍历,每次i跟i+1对比,但是,因为往右处理,i+1下次值有可能发生变化,那么i的对比就不对了,因此要从右往左,保证右边已经处理过了即可。如果,经过这样一轮后,K还是大于0,此时,数组全部为正,已经最大了,如果此时的k为偶数,那就不用管,如果是奇数,表示必须有一个数变成负数,在排序,最小的变成负数就好。

2024-01-03 17:11:52 399

原创 day 36贪心(5)

这道题我的做法与上一道题一致,多加了个记录变化区间范围的标量,本来向删除的,但想了想,没必要,结果返回删除的数量即可,所以将要删除的区间范围更改为不影响判断即可。分割的地方就是字母最后出现的位置,所以首先利用哈希原理记录每个字母出现的最后位置,然后比大小,直到遇到最大的,也就是最后位置了,则分为一段。这道题开始陷入了写代码误区,每次比较跟原始数组比较的,所以结果不正确,最后发现,直接跟result最后一个元素比较就好!这道题开始没思路,看了文字讲解后才明白。

2024-01-03 10:51:50 367

原创 day35贪心(4)

思路:从第二个气球开始,该气球的前面与上一个气球的后面比较,可以判断是否重叠,如果不重叠,说明两个气球没关系,此时一定需要多射一根箭的,如果有重叠,那就能该气球就能跟上一个气球公用一根箭,因此不用射箭,相当于两个气球二合一,那气球右边界就要更新,为了下一个气球的判断。这道题比较简单,主要就是当是20的时候,优先将10元的当作零钱,因为5元的作用比10元大,如果没10元,再看五元,这应该就是贪心贪的地方了,写完代码,一堆if。这道题,想到了重叠区间,也知道要排序,但之后就不会了。

2024-01-02 22:48:26 371

原创 day32 贪心(2)

其实主要就是一个分解的思想很难想象。就将一个大范围分解为两天两天的,虽然题目写每一天只能买或者卖,但思路是可以变变通得,要是明白这个拆分思想,那做法就变得清晰起来了,计算每两天得分解结果,因为只能持有一张股票,所以分解得就可以看作最后的选择,又要最大利润,那就所有正数之和喽,解法不就出来了!这道题,虽然没看出来贪心得点在哪,但明白了一句话,“贪心要么简单,要么打死都不会”,这题就是,硬看半天没思路,讲解一看,有感觉好简单,总结就一句话,只要从当前位置(下标)走最大范围得距离能到最后,那就能跳过去。

2023-12-30 20:15:34 373

原创 day 31 贪心(1)

问题实际情况可能有很多种,平坡,一直是上坡、下坡等等,这种情况怎么办,以为又要分别判断了,但最后发现,就算有这些情况,不用做处理啊,直接跳过就行了,我们要的只有坡峰,所以只需要在坡峰时做一些操作就行,首先肯定结果数++,最后就是这个前后差值,后差值并不是值得当前节点紧挨的后插值,而是上次满足坡峰要求是的前差值,到这个点就变成后差值了,因此这个后差值,只需要在满足坡峰要求时更新就好,仔细想想,这个操作也就是将刚才说的各种情况全部跳过去的意思。贪心的本质很简单,就是选取每一阶段的局部最优,从而达到全局最优。

2023-12-29 16:08:36 430

原创 day30 回溯(06)【今天没做题,简单记录一下日程与感想】

今天项目汇报,因为种种原因,是我给许多甲方领导汇报,以算法专家的身份(窃喜),当领导提出问题的时候,一声声 *博士 ,感觉有点好呢,虽然目前不是博士,但这称呼也太赞了,或许这就是人读博的意义吧。今天确实事情有些多,项目汇报,还有一个C++单子的交付。并且临近考试,本来想着现在晚上十点多打卡学习,但一看,三道有难度的题,时间不够了,直接劝退,所以今天三道题先欠着吧。对于接单子的问题,本人也是刚开始做,但质量保证,如果有需要的朋友可以联系,主要业务是:深度学习、机器学习、C++程序开发这三部分。

2023-12-28 22:25:12 375

原创 day 29回溯(05)

这道题跟昨天那个子集挺像的,无非就是加了个非递减、至少两个元素的条件,所以给result中添加结果是要做判断,首先个数大于1,其次就是非递减,每次添加元素都是在最后,因此这里的判断是针对最后一个元素和倒数第二个元素即可,大于或者等于,满足以上两个条件的,就push。在这么多回溯问题中的剪枝操作,都在强调是同层的,而不是深度的,判断语句中的used[i-1]==fasle,就是强调,如果相同,且另一个还没用到,就是表示同层的,如果另一个用到了,那就是往下递归呢,也就是深度,是允许重复的。

2023-12-27 11:11:10 343

原创 day28 回溯(04)

这道题比较容易,做了很多回溯的题,这道题没有额外的逻辑,直接写回溯框架就行。这道题跟昨天那道题一样,每一层不允许重复,但深度可以有重复,所以看剪枝怎么写。这道题跟分割回文串一样,穷举所有结果,就看终止条件及回溯过程怎么写。回溯还是理解不深刻,自己写不出来完整代码,之后得二刷巩固一下。

2023-12-26 16:29:16 379

原创 day27 回溯(03)

这道题还是组合问题,一样的代码套路,不过就是递归参数不同,数组元素可以重复,所以是i而不是i+1;乍一看以为一样,细看后发现,首先,不允许重复使用,所以递归参数是i+1,其次也是本题的关键,数组中会出现重复数字,但是结果不允许出现重复,因此在第一层递归中,遇到相同的值就要越过,这里要注意。在跳过相同的判断中i>index就是将同层没有相同的,如果是i>0,则是将所有相同元素都越过了。,在开始对数据进行排序,这样相同值就相邻了,然后递归判断前后相同不,相同就跳过,

2023-12-25 15:42:23 433

原创 day 25回溯(二)

这道题开始看不懂,感觉很迷。首先要数字映射到字母,然后遍历字母,不断地递归。这这道题跟昨天组合一样,只不过加了个条件罢了,思路还是一样的。

2023-12-23 21:58:33 370

原创 day24 回溯(一)

这道题暴力for循环就是一层for确定一个值,k等于几,就几个for。回溯也是类似的思想,首先确定回溯重点,也就是长度达到了k,此时将数据加入到result中即可,下来就是回溯的过程了,确定一个值,再将剩下值递归下去,然后结束一层就要弹出该值。之前二叉树对递归还算比较熟悉,但回溯还是有些生疏,这道题开始也是有些不懂,看了文字讲解,才有些懵懂,最后对着参考代码手动推了一遍过程,才理解,最后独立实现代码。其实回溯就是枚举,同样是将所有情况遍历一遍,感觉是没有办法的办法,毕竟枚举效率低。

2023-12-22 21:26:25 355

原创 day 23二叉树(九)

最后看文字讲解,恍然大悟,中序的反向遍历,这样遍历值就是从大到小了,累加就是数值往后加,比如第一个遍历的节点,也就是最大的,此时没有任何需要累加的,因此表示累加和的变量初始值为1,遍历节点后将该节点值加给该变量;之后第二个节点,满足要求的就是最有一个值,不就是我们定义的累加变量的值吗?所以依次往后变量即可。这道题,简直了,废了半天功夫,开始感觉没啥啊,跟昨天删除二叉树节点一样啊,不满足要求的,删掉就行呗,写了半天,一直报错,然后debug,太费时间了,结果最后发现,是主函数return写错了,服啦。

2023-12-21 15:26:20 372

原创 day22 二叉树(八)

与昨天的不同,今天是二叉搜索树,不用在回溯挨个找节点了,要利用二叉搜索树的性质,两个结点的最近公共祖先,一定满足该节点值在【p,q】之间,如果全部大于qp,则说明pq在左子树,如果全部小于pq,则说明在右子树,这递归逻辑不就出来了!这题第一眼看,感觉很麻烦,找到节点后,删除后,删除节点的左右子树怎么协调,情况有很多种,难道挨个if?最后看文字讲解,emm确实是多种情况分别处理,不过,没我想的那么复杂,大体来说,当找到删除节点,该节点无非四种情况,这具体操作就很简单了,往下递归呗,直到空,那就新增一个节点。

2023-12-20 10:57:13 341

原创 day21二叉树(七)

这道题思路很多,肯定需要遍历的,可以在遍历时统计频率,但逻辑可能会比较乱,最好理解的还是先保存遍历结果(顺序无要求),之后遍历结果数组,这里是频率,我很自然想到了用map,因此遍历数组,频率保存在map中,再找到最大频率,最后保存最大频率对应的key,也就是我们节点的val即可!害,开始题目看错了,以为求的是相连节点,也就是父子节点最小绝对差,结果提交某些测试用例没通过,才发现求的是任意不同节点,这里把我写的。这道题感觉有些难度的,开始自己想,理不清逻辑,看了代码随想录文字讲解后,才明白了.

2023-12-19 16:34:18 376

原创 C++指针

通过指针间接访问内存指针就是地址//1、定义指针int * p;int a = 10;//2、使用指针p = &a;cout

2023-12-18 21:07:06 378

原创 day 20二叉树(六)【day19休息】

二叉树递归题做多了,看这道题就很顺手了,思路也很简单,根据给的数组数组找到最大值索引,之后将数组分为两个子数组,分别递归传入函数构造左右子树。这道题,一样的逻辑,这几天写树相关的题,每次都是递归,已经越来越顺手了,熟能生巧是有道理的,这道题又是一个递归,先写终止条件吧,两个参数都是空,或者一个为空。以上三种是终止条件,如果不是,则要递归了,先创建节点,然后节点左右子树分别递归即可。这道题也是简单的递归,首先确定终止条件,找不到val,也就是递归到叶子节点的子树(NULL),此时返回NULL;

2023-12-18 15:35:14 343

原创 day 18二叉树(五)

这道题跟前几天做的一道所有路径很相似,那道题是将所有路径要要求打印出来,这是求和,思路是一样的,只是在最终路径处理上不同,这道题在叶子节点是将path的值全部相加,如果==targetsum,则返回true即可。这道题很直观的就是想到层序遍历,最后一层的第一个节点值就是我们需要的,而且很偷懒的是,不用判断是不是最后一层,每一层第一个节点值都保存,会覆盖,最后的值就是我们要的。最后看代码随想录还讲了递归写法,就是在递归时加了个深度变量,最深且是左节点的就是我们要找的值,挺麻烦的,不细说了。

2023-12-16 11:13:28 492

原创 day 17 二叉树(四)

而且是最大的那个,所以求高度的代码不就有了,每递归一层,高度加一,然后比较左右子树的高度,返回最大的那个!写了后提交,某些测试用例不通过,才反映过来,不过也好说,进一步修改就行了,给递归函数加了bool参数,是左节点为true,这样递归最后看是叶子节点,且该参数为true,在加入sum即可!这就是完整逻辑,但最后我对递归产生了质疑,感觉,递归怎么有点不太有用了,好像最后返回true也行?开始这么写,就有问题了,这样写的结果是把所有路径累加在一起了,我们新的访问函数需要将之前path里的值删去,

2023-12-15 15:00:18 400

原创 day16二叉树(三) && day11栈与队列(Ⅱ)【补】

这道题本身没难度,逻辑也很简单,但在一行代码一直报地址错误,:如果s[i]是右括号,且栈顶是相匹配的左括号,则说明匹配正确,栈顶元素弹出。‘){’,在这种情况下,感觉没错啊,开始是右括号‘)’,但栈顶不是相应的左括号啊,就if判断错呗,后来才发现,此时,栈根本就是空,所以访问栈顶元素这个操作就不对!按,上道题逻辑,最后得到一个栈,里面包含最终删除相邻重复的结果。这道题是典型的栈应用问题,用一个栈记录计算数,然后遍历vector,遇到操作符,就弹出两个计算数,再将结果压入栈,最后栈里的唯一元素就是结果。

2023-12-14 11:37:00 334

原创 day15 二叉树(二)

所有做题思路很简单,就是一个队列先进根节点,如果队列不为空,意味着遍历未停止,然后记录对头结点的值,再将对头结点的左右子树入队,一直循环即可,最后得到层序遍历结果。,因此只需要记录while时队列的长度,然后一个for遍历队列到该size,此时就是这一层的值,这一层单独记录在一个vector,while后加入到总result中。这道题很典型的递归啊,只是开始我在纠结,三行代码的顺序怎么写,但想来想去,好像没关系的样子,也测试了不同顺序,也确实没影响。我的感受就是,只要掌握层序遍历的底层逻辑,扩展都很简单!

2023-12-13 13:38:34 847

原创 day10栈与队列(一)

如果继续用两个队列实现栈,想一想,入栈还是一样,一个队列(记作队列1)入队即可,那么出栈呢,按理就是队列1的队尾元素,但队列只允许头出,因此需要将队列1的除队尾值外其余所有值全部弹出,保存在队列2,中,因此队列2就是备份的作用。为了保持两个队列的性质,成功弹出值后,将队列2赋值给队列1,然后队列2清空,这样就恢复原始了。因此进阶一下,用一个队列模拟栈。其实就是用两个栈模拟入队和出队,入队好说,那出队顺序要与入队顺序相同,所以需要两个栈,一进一出,两次顺序反转,不就和开始顺序顺序相同了嘛?

2023-12-12 17:10:25 370

原创 day14 二叉树(一)

循环的条件是栈不为空,若为空,则表示遍历完了,return就行,但要注意,每次入栈要保证节点不为空,开始写代码就是忘了该条件,导致一直循环,退不出去,执行超时了。这里是代码不同的原因:因为前序遍历的顺序是中左右,先访问的元素是中间节点,要处理的元素也是中间节点,所以刚刚才能写出相对简洁的代码,因为要访问的元素和要处理的元素顺序是一致的,都是中间节点。二叉树的深度遍历三种情况,前序中序后序,逻辑都一样,顺序不同罢了,递归是最简单的实现方法,也没什么可具体解释的,直到节点为空时递归结束。

2023-12-12 16:29:21 320

原创 day13 栈与队列(三)

实际我们要维护的单调队列内容并不包括所有窗口的元素,例如{2, 3, 5, 1 ,4},单调队列里只维护{5, 4}。如果大于队尾元素,将队尾元素弹出。先增加2,再增加3时,要增加的3>队尾元素2,因此弹出2,增加3。如果不等于,则表示这次窗口滑动删掉的元素不影响新的单调队列,因此单调队列不用改变,这是滑动删除的元素。本题就是每次窗口内容放在一个单调队列中,那么每次直接返回队头元素(最大值)即可,在删一个元素以及填一个元素。今天刚出差回来,拉下了很多天的博客,慢慢补吧,每天做当天的任务,再补一篇博客。

2023-12-11 15:31:12 397

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除