自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 接龙数列(2023蓝桥杯真题)

2024-02-17 20:51:36 497

原创 合并两个有序链表

2.只关心某一个子问题在做什么事情 --》 函数体的设计。1.重复子问题 --》 函数头的设计。递归: 找重复的子问题。

2024-01-30 17:55:20 444

原创 汉诺塔问题

先把x柱子上的一堆盘子,借助y柱子转移到z柱子上。2.只关心某一个子问题在做什么 --》 函数体。大问题 ---》 相同类型的子问题。子问题 ---》 相同类型的子问题。1.重复子问题 ---》 函数头。那么如何编写递归代码?

2024-01-27 19:33:12 465

原创 扫雷游戏()

2024-01-16 16:55:08 380

原创 太平洋大西洋水流问题

2024-01-15 17:03:47 457

原创 被围绕的区域

2024-01-10 19:12:03 380

原创 岛屿的最大面积

2024-01-09 21:11:30 424

原创 岛屿数量(DFS)

2024-01-09 18:50:41 345

原创 FloodFill算法 --- 图的渲染

2024-01-09 16:58:23 390

原创 删除并获得点数(动态规划)

从左往右填表,两个表同时填。

2024-01-09 16:04:26 392

原创 简单多状态dp问题(打家劫舍Ⅱ)

通过分类谈论,将环形的问题,转化成两个线性的 “ 打家劫舍Ⅰ ”从左往右填表,两个表一块填。

2024-01-05 02:20:56 366

原创 按摩师(简单多状态dp问题)

从左往右,两个表同时填。

2024-01-02 02:31:40 369

原创 地下城游戏(dp问题)

从下往上填,每一行,每一行从右往左。

2024-01-01 21:06:36 339

原创 TCP服务器的编写(下)

当然是不需要的,你本身是一个客户端,其他人写的应用也可能是客户端,如果我们bind,一定意味着我们当前客户端进程绑定的一定是一个非常具体的端口号,一旦绑定的是一个具体的端口号,换而言之,A客户端,B客户端,是由不同的软件公司提供的,那么这里绑定的端口号,有可能在不经过商量的情况下,冲突,那么就势必会有某一个客户端启动不起来!不需要,多进程当中每个进程都有文件描述符表,但是在多线程这里每一个线程,和我们的主线程是会共享文件描述符表的!我们的客户端,创建完套接字,需不需要bind呢?

2023-12-31 01:50:39 676

原创 TCP服务器的编写(上)

因为我们目前写的是单进程,获取连接成功,进行server时,server内部是一个死循环,这个死循环在进行读取,如果server内部死循环不退出,那么一直在进行读取,但进程的执行流,就无法回到上面accept获取新连接。而我们tcp创建好套接字,在进行绑定,因为我们tcp是面向连接的,当我们正式通信的时候,需要建立连接。那么接下来,如果是udp创建好套接字在进行绑定,那么基本上就完成我们udp服务器的初始化。---- 为什么?目前来说我们的tcp套接和udp套接是没有任何区别的!

2023-12-15 23:58:25 547

原创 下降路径最小和/最小路径和(dp问题)

dp表最后一行的最小值。

2023-12-12 13:28:38 384

原创 不同路径dp问题

1.虚拟位的值要保证后面填表是正确的。从上往下填写,每一行。

2023-12-11 23:33:39 384

原创 解码方法dp

6.处理边界问题以及初始化问题的技巧。

2023-12-11 00:24:40 352

原创 使用最小花费爬楼梯

1.状态表示2.状态转移方程3.初始化4.填表顺序5.返回值解法2:1.状态表示2.状态转移方程3.初始化4.填表从右往左5.返回值。

2023-12-10 00:04:59 360

原创 第N个泰波那锲数

为了填写当前状态的时候,所需要的状态已经计算过了!题目要求 + 状态表示。

2023-12-05 02:08:28 367

原创 实现一个简单的网络通信下(udp)

目前来看,我们客户端发一条消息,我服务器收到这一条消息之后呢,服务器也知道了是谁给我发来的消息,紧接这就把这条消息放进buffer当中,在把我们的 用户IP和端口号,提取出来当作我们 的key插入我们的用户管理当中,在发回给客户端。发现此时我们的多线程读写,用的sock都是同一个,sock代表的就是文件(我们是没办法对同一个文件同时又是读又是写的),但是在这边是没有问题的,我们的udp是全双工的 --> 可以同时进行收和发,而不受干扰。但是此时,一个客户端把要发的和要收的消息,混在一起了,我们可以分开来。

2023-12-04 01:37:26 677

原创 实现一个简单的网络通信上

如果我们当前已经创建好了一个套接字,那么我们有了一个文件描述符,那么就给未来通信提供了一种能力,能够通过文件描述符进行IO,但是套接字通信是两台跨网络的主机,上面的应用进程在进行通信,那么套接字通信时,需要用ip和port标识该服务器上唯一的进程。我们写的是基于udp协议的服务器,如果你想进行网络编程,那么创建的第一个就是socket 创建套接字。现在我们的客户端和服务器就可以建立连接了,接下来我们写点更好玩的。那么我们的服务器有了,接下来就是初始化服务器。至此我们的简单的完成了我们的客户端和服务器。

2023-12-01 23:28:55 378

原创 LCA算法(求两节点最近公共祖先)

和前面暴搜中第二种同步前进法一样的,先让深度大的节点y向上走到与x同深度 , 然后x和y一起向上走,和爆搜不一样的是,向上走的按照倍增思想走的,不是一步一步地向上走,因此速度更快。总结:按照增量递减的方式,到达的节点深度比x的深度小时,什么也不做,到达的深度大于等于x深度时,y上移,直到增量为0,此时x,y在同一深度。2.减少增量,x,y同时向上走2^2步,此时到达的节点不同,x,y上移 x=F[x][2] , y=F[y][2]4.减少增量,x,y同时向上走2^0步,此时到达的节点相同,什么也不做。

2023-12-01 23:27:53 389

原创 网络编程套接字

那么现在问题来了,我们有了IP地址,能够通过IP地址将数据交付到对方主机上,交给了对应的主机之后,怎么保证对方主机可以把数据交付给特定的进程呢?套接字种类的不同,理论上是三种应用场景,对应的应该是三套接口!---》但是不想设计过多的接口!---》将所有的接口统一,用的都是同一套函数。你在玩抖音,你得把抖音打开了,才能给你推视频,客户端软件必须运行的状态,才能给你推视频。2.原始socket(跳过传输层的接口,可以直接调用网络层接口甚至是数据链路层的接口)1.域间socket(本主机间的通信)

2023-11-13 23:44:45 195

原创 网络基础(1)

如果当B和D在进行通信时,A也向这个局域网发送光电信号,A是个捣蛋分子,B刚给D发送了一个信号,局域网是共享的,A不断的向这个局域网当中发送信号,那么这时候就会将A发出的信号和B发出的信号揉在一起,那D都无法识别B的信息了-------------A主机想把数据发给B主机,拿到B主机的MAX地址没有任何用,毕竟A没有办法直接向B主机直接通信,所以A主机要向B主机发起通信,只能拿到B主机的IP地址(A主机有的是方法拿到B主机的IP地址) , 那么A主机只能用B主机的IP地址给B主机发信息了。

2023-11-09 23:35:44 192

原创 Floyd - Warshall (弗洛伊德算法)

设K是p的一个中间节点,那么从i到 j 的最短路径就被分成 i到 k 和 k 到 j 的两段最短路径p1和p2,p1是从 i到 k且中间节点属于 {1 ,2 ,... , k-1}取得的一条最短路径,p2是从k到 j 且中间节点属于{1 , 2 , ... ,k-1}取得的一条最短路径。Floyd算法考虑的是一条最短路径的中间节点,即简单路径p={v1 , v2, ... ,vn}上除v1和vn的任意节点。Floyd-Warshall算法的原理是。因此 , Di,j,k = min(

2023-11-01 12:28:02 126

原创 Bellman-ford 贝尔曼-福特算法

它也有明显的缺点,它的时间复杂度O(N*E)(N是点数 , E是边数)普遍是要高于Dijkstra算法O(N^2)的,像这里,我们使用邻接矩阵实现,那么遍历所有边的数量的时间复杂度就是O(N^3),这里也可以看出Bellman-ford就是一种暴力求解更新。我们这边i-->j的边只更新一次。而且可以判断是否负权回路。

2023-10-31 23:00:55 349

原创 单源最短路径 -- Dijkstra

针对一个带权有向图G , 将所有节点分为两组S和Q , S是已经确定的最短路径的节点集合,在初始时为空(初始时就可以将源节点s放入,毕竟源节点到自己的代价是0 ), Q为其余未确定最短路径的节点集合,松弛即对每一个相邻节点v,判断源节点s到节点u的代价与u到v的代价之和是否比原来的s到v的代价更小,若代价比原来小则要将s到v代价更新为s到u与u到v的代价之后,否则维持原样,如此反复,直到Q集合。Dijkstra算法就适用于解决带权重的有向图上的单源最短路径问题 --带有负权路的,搞不定。

2023-10-26 02:14:53 249

原创 ---图的遍历和最小生成树

一个连通图的最小连通子图称作该图的生成树,有n个顶点的连通图的生成树有n个顶点和n-1条边(最少的边连通起来)如果给的图不是连通图?以某个点为起点就没有遍历完成。那么怎么保证遍历完剩下的点呢?在标记数组当中找没有遍历过的点,在进行遍历。构成生成树的这些边加起来权值是最小的!

2023-10-21 01:39:05 275

原创 图的基本概念

在无向图中,(u , v)是E(G)的一条边,则称u和v互为邻接顶点,并称边(u,v)依附于顶点u和v , 在有向图中,若(u , v)是E(G)的一条边,则称顶点u邻接到v,顶点v邻接自顶点u,并称<u,v>与顶点u和顶点v相关联。在图G = (V ,E)中,若从顶点Vi出发有一组边使其可达到顶点Vj,则称顶点Vi到顶点Vj的顶点序列为从顶点Vi到顶点Vj的路径。:在有n个顶点的无向图中,若有n*(n-1) /2 条边,即任意两个顶点之间有且仅有一条边,则称此图为。树关注的节点(顶点)中存的值。

2023-10-16 22:37:41 81

原创 并查集路径压缩

我们来看看如果要是100个数,往20个数的集合合并如何。那么我们应该,把数据量小的集合往数据量大的合并。

2023-10-15 12:31:40 93

原创 并查集的实现的应用

就假如 s1={0,6,7,8} , s2={1,4,9} , s3={2,3,5} ,这三个小分队内的成员互相认识,这样就形成了3个集合,并把编号为 0 1 2的三名学生分别作为小分队的队长。现招了10名学生,来自不同的学校,刚开始互相不认识,给10名学生编号 :{0,1,2,3,4,5,6,7,8,9};10名学生去旅游,在旅游的路上,有的学生互相认识,之后组成了群体,结伴旅行,这时候我们就形成了一个一个的集合。我们如何通过10名同学的名字,进行编号?

2023-10-10 23:27:51 36

原创 哈希应用 : 位图和布隆过滤器

近似算法: 把一个文件放进布隆过滤器当中,在把另一个文件与布隆过滤器进行比对,在就是交集,当然这里存在两个问题就是,在也有可能存在误判,然后没有去重。我们的位图只能处理整数,但是要是我们来了字符串,但是数据量又很大很大我们就得用布隆过滤器。在这里我们可以用一种哈希的新方法 -- 又快又节省内存(位图)BloomFilter能否支持删除呢?

2023-10-09 13:37:15 80

原创 哈希 -- 开散列(哈希桶)

这里我们要是用string(string来做key)来取模,再增加一个模板参数,配一个取模的仿函数即可。

2023-09-24 01:43:04 93

原创 哈希 -- 开散列

但是当负载因子到一个基准值,就扩容,基准值越大冲突越大,冲突越多,效率越低,但是空间利用率越高。因为string也是常常作为key,那么我们怎么才能不显示的传关于string的仿函数。基准值越小,冲突越少,效率越高,空间利用率越低。------------------使用特化。我们再用上面代码来实现我们的统计次数问题。以上就是我们的线性探测基本代码实现。一般基准值设为0.7。

2023-09-22 13:57:47 52

原创 set和map通过一颗红黑树进行封装

原因是因为 , 我们的RBTree当中不仅仅有insert插入 (虽然insert插入 ,set比较的key , map比较的pair当中的first 也就是key ) ,还有find ,那么我们find比较的也是key了,我们多传一个模板参数K ,可以利用模板K ,来进行key的比较,(虽然set对find没有影响,但是map当中find还是有影响的,不然需要取pair当中的first来进行比较,不太便利)data对于map而言是pair , 我们得用pair的first来比。

2023-09-19 16:49:02 75

原创 红黑树(AVL树的优化)下(代码实现)

解决情况一的 : cur为红,parent是红 , grandfater是黑,uncle存在且为红的情况。我们先简单的将节点找到要插入的位置,进行前后链接(先不进行调整)

2023-08-31 01:00:27 167

原创 红黑树(AVL树的优化)上

红黑树,是一种搜索二叉树,单在每个节点上增加一个存储位表示节点的颜色,可以是Red或Block,通过对任何一条从根到路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其它路径长出两倍,因而是接近平衡的。我们上面的过程,红黑树的插入问题可能光变色就够了,插入节点之后最短并没有超过最长的2倍,也不需要旋转,降长度。有的大佬认为AVL树太过严格,对平衡的要求越严格,会带来更多的旋转(旋转也还是会有一定的消耗!4.对于每个节点,从该节点到其所有后代叶节点的简单路径上,均包含有相同的数目的黑色节点。

2023-08-30 00:23:16 138

原创 AVLTree深度剖析(双旋)

我们在这里的三种情况下,旋转的过程都是一样的,但是最后平衡因子的更新却是不同的,所以我们需要知道如何去区分是那种情况,好进行对应的平衡因子更新。在上一篇文章中我们提到了,单旋的情况(无论是左单旋还是右单旋),都仅仅适用于绝对的左边高或者绝对的右边高。旋完之后,形成了对称关系,我们右单旋之后,在用一次左单旋,发现又回去了!我们还有可能是在c插入的,但是还是一样的旋转过程,无非就是平衡因子的更新不同。还有一种极端情况 h==0的情况 但是旋转的过程都是不变的。这里就不做多解释了!

2023-07-23 20:42:14 125

原创 AVLTree深度剖析(单旋)

更新后,parent->_bf == 1 or -1 , 1代表右边高, -1代表左边高 ,这里要不要继续往上更新平衡因子的因素取决于,parent子树的高度是否变化,parent的平衡因子变为-1或者1,高度肯定的变了,为什么呢?3.更新后,parent->_bf ==0 ,说明parent插入之前的平衡因子 -1 或者 1 加加或者减减一下,说明左右子树一边高一边低,插入之后,两边一样高,说明插入填上了矮的那一边,parent所在的子树高度不变,不需要继续向上更新。

2023-07-18 19:54:38 211

空空如也

空空如也

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

TA关注的人

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