自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【初阶数据结构与算法】第十篇——八大排序算法(头脑风暴逻辑分析+动图详解一看就会+代码分析信手捏来)

💬**作者介绍:**自动化,大水生一枚,希望可以一起进步!🏆个人主页:企鹅不叫的博客​ 🌈专栏C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C++初阶和进阶⭐️ 博主码云gitee链接:代码仓库地址⚡若有帮助可以【关注+点赞+收藏】,大家一起进步!https://gitee.com/royal-never-give-up)💙系列文章💙【初阶数据结构与算法】第一篇:算法中的时间复杂度和空间复杂度【初阶数据结构与算法】第二篇:顺序表【初阶数据结构与算法】第三篇..

2023-10-21 23:12:17 2016 53

原创 【初阶与进阶C++详解】第一篇:C++入门知识必备

​⭐️本篇博客我要给大家分享一下C++入门知识。希望对大家有所帮助。⭐️ 博主码云gitee链接:码云主页前言​💎一、C++关键字🧡C++又新增了31个关键字,一共63个关键字​💎二、命名空间🧡在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的,....

2022-04-07 13:40:46 1990 37

原创 面试题 01.01. 判定字符是否唯一

作为位掩码来记录字符的出现情况。对于字符串中的每个字符,通过减去字符 ‘a’ 得到一个相对于 ‘a’ 的偏移量。假设字符串仅包含小写字母(‘a’到’z’),我们可以使用一个整数变量。如果未设置,则使用按位或操作。如果当前字符对应的位在。不为零),则说明该字符已出现过,返回。将该位设置为1,继续检查下一个字符。实现一个算法,确定一个字符串。的所有字符是否全都不同。

2024-10-16 09:39:36 187

原创 位运算总结

:有0就是0,|:有1就是1,^:相同为0,相异为1。表示负数,其余位表示数值的绝对值。用0 或 1表示不存在或者存在。,默认左边是高位,右边是低位。位是 1,其余位都是 0。的反码是将该数的原码中。的补码与它的原码相同,一大堆数^,结果唯一。

2024-10-16 09:39:05 394

原创 1314. 矩阵区域和

的矩形区域的和,其中利用四个前缀和值来快速计算任意矩形的和。到当前位置的矩形区域的所有元素的和。是所有满足下述条件的元素。,根据前缀和矩阵快速计算以。每个元素表示从矩阵左上角。

2024-10-14 09:20:35 333

原创 哈夫曼树和哈夫曼编码

其中我么你发现A 出现三次,B出现一次,C出现两次,D出现一次。那么我们统计出现次数为:3,2,1,1。那么我们得到了所有字符的编码。现在统计次数变为3,2,2。同时我们定义左为0,右为1。现在需要对下列字符编码。我们将1,1组成一个树。我们将2,2组成一个树。现在统计次数变为3,4。我们将3,4组成一个树。

2024-10-12 16:17:57 124

原创 LCR 012. 寻找数组的中心下标

数组的最后一个位置为0,从右向左计算每个位置右侧所有元素的和,计算的区间是i+1到n-1,数组所有元素初始化为0。数组的第一个位置为0,然后从左向右计算每个位置左侧所有元素的和,计算的区间是0到i-1,数组所有元素初始化为0。是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。,left数组第一个我们手动给0,right数组最后一个,防止越界。如果中心下标位于数组最左端,那么左侧数之和视为。来分别存储数组中每个位置左侧和右侧的元素和。如果数组不存在中心下标,返回。

2024-10-12 09:28:35 271

原创 238. 除自身以外数组的乘积

边界问题,left的第一个元素要初始化为1,right的最后一个元素要初始化为1。数组中,计算的区间是i+1到n-1,数组所有元素初始化为1。数组中,计算的区间是0到i-1,数组所有元素初始化为1。之中任意元素的全部前缀元素和后缀的乘积都在。,从而得到每个元素除自身以外的所有元素的乘积。数组对应位置的乘积赋值给结果数组。请 **不要使用除法,**且在。计算每个元素左侧的乘积并存储在。计算每个元素右侧的乘积并存储在。之外其余各元素的乘积。时间复杂度内完成此题。

2024-10-10 19:10:52 453

原创 LCR 012. 寻找数组的中心下标

数组的最后一个位置为0,从右向左计算每个位置右侧所有元素的和,计算的区间是i+1到n-1,数组所有元素初始化为0。数组的第一个位置为0,然后从左向右计算每个位置左侧所有元素的和,计算的区间是0到i-1,数组所有元素初始化为0。是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。,left数组第一个我们手动给0,right数组最后一个,防止越界。如果中心下标位于数组最左端,那么左侧数之和视为。来分别存储数组中每个位置左侧和右侧的元素和。如果数组不存在中心下标,返回。

2024-10-10 19:10:12 252

原创 DP35 【模板】二维前缀和

暴力解法,时间复杂度为O(n* m *q),二维前缀和时间复杂度为O(m *n)+O(q),接下来有 q 次查询,每次查询输入 4 个参数 x1 , y1 , x2 , y2。请输出以 (x1, y1) 为左上角 , (x2,y2) 为右下角的子矩阵的和,接下来q行,每行4个整数x1, y1, x2, y2,分别代表这次查询的参数。给你一个 n 行 m 列的矩阵 A ,下标从1开始。接下来n行,每行m个整数,代表矩阵的元素。第一行包含三个整数n,m,q.输出q行,每行表示查询结果。

2024-10-09 09:36:43 362

原创 DP34 【模板】前缀和

暴力解法,时间复杂度为O(n*q),q是查询次数,这里主要用前缀和。接下来有q次查询, 每次查询有两个参数l, r.对于每个询问, 请输出al+al+1+…第二行包含n个整数, 表示a1,a2,…给定一个长度为n的数组a1,a2,…接下来q行,每行包含两个整数 l和r.输出q行,每行代表一次查询的结果.第一行包含两个整数n和q.

2024-10-09 09:35:37 417

原创 在0~n-1中缺失的数字

一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。最简单的方式遍历,用二分的方法,数组中的每个元素的值都应该等于它的索引(当某个位置的值和它的索引不相等时,说明缺失的数字在该位置或之前。输入: [0,1,2,3,4,5,6,7,9]输入: [0,1,3]

2024-10-08 13:06:20 270

原创 Git操作

写好代码后,add,commit,之后git push如果失败,可能是远程分支比本地更块更新,需要先将最新代码git pull下来尝试合并如果合并有冲突,则解决冲突,然后合并,然后git push将分支dev合并到master分支,然后删除dev分支。

2024-10-07 15:58:07 921

原创 162. 寻找峰值

找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回。峰值元素是指其值严格大于左右相邻值的元素。否则,峰值一定在右侧,因此将。,说明峰值可能在左侧(包括。相遇时,即找到了峰值的位置。你必须实现时间复杂度为。的算法来解决此问题。

2024-10-07 12:03:17 185

原创 852. 山脉数组的峰顶索引

说明峰值在右侧,因此移动左指针;否则,峰值在左侧或当前中间元素处,因此移动右指针。最终,当左右指针相遇时,左指针的位置即为山脉数组的峰值索引。你必须设计并实现时间复杂度为。,其中的值递增到一个。返回峰值元素的下标。

2024-10-07 12:02:40 368

原创 852. 山脉数组的峰顶索引

说明峰值在右侧,因此移动左指针;否则,峰值在左侧或当前中间元素处,因此移动右指针。最终,当左右指针相遇时,左指针的位置即为山脉数组的峰值索引。你必须设计并实现时间复杂度为。,其中的值递增到一个。返回峰值元素的下标。

2024-10-06 12:33:09 415

原创 LCR 068. 搜索插入位置

如果目标值不存在于数组中,返回它将会被按顺序插入的位置。给定一个排序的整数数组。请必须使用时间复杂度为。

2024-10-06 12:32:36 307

原创 69. x 的平方根

*注意:**不允许使用任何内置指数函数和算符,例如。由于返回类型是整数,结果只保留。

2024-10-05 15:04:52 492

原创 34. 在排序数组中查找元素的第一个和最后一个位置

首先先记住上面三个模板,题目要求是找到区间,先找到区间左端点,和区间右端点,注意细节判断。请你找出给定目标值在数组中的开始位置和结束位置。给你一个按照非递减顺序排列的整数数组。用于查找左边界,排除掉那些小于。用于查找右边界,排除掉那些大于。你必须设计并实现时间复杂度为。的值,确保找到最左侧的。的值,确保找到最右侧的。如果数组中不存在目标值。

2024-10-05 15:04:22 250

原创 438. 找到字符串中所有字母异位词

由于异位词是单词数量相同,顺序不一定相同,先用两个哈希表将俩个字符串装进去,然后判断两个哈希表是否相同,相同就将起始位置0收集,之后用滑动窗口判断要求,将s的有边界加入到哈希表中,将s的左边界移除哈希表,每次移动完后判断两个哈希表是否相等,相等则记录当前的窗口起始位置。的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词是指两个字符串除了字母的顺序不同之外,其他都相同。

2024-09-27 14:29:25 408

原创 904. 水果成篮

转化,找出一个最长的子数组长度,子数组中不超过两种类型的水果,要记录水果类型和水果数量,所以要使用unord_map,key来记录水果中类,valuse记录水果数量,当right开始增加的时候,将水果种类加入到哈希表中,当水果中类超过两种时,控制left使得水果种类回到两种。你想要尽可能多地收集水果。你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组。,返回你可以收集的水果的。

2024-09-27 14:28:55 396

原创 1658. 将 x 减到 0 的最小操作数

正难则反,通过移除一些元素,使得剩下的元素的和等于。每一次操作时,你应当移除数组。最左边或最右边的元素,然后从。数组以供接下来的操作使用。

2024-09-26 08:38:58 456

原创 1004. 最大连续1的个数 III

找出最长子数组,0的个数不超过K个,

2024-09-26 08:34:08 383

原创 3. 无重复字符的最长子串

判断重复内容可以用哈希查重,遍历每一个字符,判断是否在哈希表中,如果不在表中则插入,如果在表中需要缩小窗口。,请你找出其中不含有重复字符的。

2024-09-25 09:06:01 227

原创 LCR 008. 长度最小的子数组

当需要使用单调性的时候使用滑动窗口,left和right都是从0开始,right负责控制让窗口i变大,left负责控制让窗口变小,时间复杂度是O(N),并返回其长度**。**如果不存在符合条件的子数组,返回。个正整数的数组和一个正整数。找出该数组中满足其和。

2024-09-25 09:05:30 304

原创 18. 四数之和

请你找出并返回满足下述全部条件且。参照三数之和,注意越界和去重问题。

2024-09-24 16:07:00 355

原创 LCR 007. 三数之和

首先确定一个元素,然后剩下两个元素从两端开始遍历,注意防止越界并检查当前。已经被计算过了,同样对于第一个元素,保证并列的两个元素不同。如果两者相同,说明当前这个。

2024-09-24 16:06:29 490

原创 LCR 179. 查找总价格为目标值的两个商品

请在购物车中找到两个商品的价格总和刚好是。购物车内的商品价格按照升序记录于数组。若存在多种情况,返回任一结果即可。数组开头结尾两个双指针遍历即可。

2024-09-23 09:35:09 322

原创 611. 有效三角形的个数

a+b>c,第一步先将数组排序,然后从后往前遍历,最后一个数字为c,让第一个数字为a,倒数第二个数为b,如果a+b>c说明a+1+b>c,a+2+b>c,中间一共有b-a个三角形,那么只需要–b进行下一轮判断,如果a+b<=c说明没有数组符合要求。​ a b c 此时a+b>c符合要求有b-a等于2,sum为2。​ a b c 此时a+b>c符合要求有b-a等于1,sum为3。​ a b c 此时a+b=c不符合要求。给定一个包含非负整数的数组。例如:2,2,3,4。

2024-09-23 09:34:32 381

原创 11. 盛最多水的容器

注意不能暴力,会超时,我们从数组两边开始计算,将最大值存储,一次遍历即可。轴共同构成的容器可以容纳最多的水。找出其中的两条线,使得它们与。**说明:**你不能倾斜容器。返回容器可以储存的最大水量。

2024-09-22 14:22:51 251

原创 202. 快乐数

对于实例2我们演示之后发现最后会循环,所以判断一个数是不是快乐数,我们只需要判断是否会陷入死循环,所以我们定义快慢指针,当快指针追上慢指针的时候,我们判断此时数字是不是1,如果是1说明是快乐数,如果不是1说明不是快乐数。编写一个算法来判断一个数。

2024-09-22 14:22:21 353

原创 1089. 复写零

请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。暴力,用i遍历数组,遇到0则将0后面元素全部向后移动之后复写0。注意:请不要在超过该数组长度的位置写入元素。进行上述修改,不要从函数返回任何东西。给你一个长度固定的整数数组。

2024-09-22 14:21:50 200

原创 283. 移动零

例如 nums = [0,1,0,3,12],一开始pre指向-1,cur指向0,然后cur遇到0直接向后移动,cur变为1,然后cur遇到非零,此时将pre++后pre为0,之后交换pre和cur指向的值,之后++cur,cur变为2指向为0,则向后移动,以此类推。遇到0,++cur,遇到非零,++pre,然后交换nums[cur]和nums[pre],之后++cur。思想:定义两个指针cur=0,pre=-1,cur从0开始遍历数组。,必须在不复制数组的情况下原地对数组进行操作。,编写一个函数将所有。

2024-09-22 14:20:59 317

原创 【网络编程】网页的显示过程

首先我们知道网页经过网络总共有应用层,传输层,网络层,数据链路层,物理层。

2024-09-22 14:19:44 377

原创 【Linux】第十八章 Reactor模式

在读取完毕后,我们需要在协议里面定义一个根据应用层协议字段来分离报文的函数(避免 tcp 的粘包问题),最终会得到一个 string 的数组,每个数组成员都是一个完整的报文;主要使用单 Reactor 单线程,相当于请求到来时,判断请求是各种事件,然后将请求和事件和回调方法结合存放到红黑树当中,当时间就绪的时候回调对应事件的处理方法。最后,我们直接一个 for 循环,通过该 tcpserver 对象在初始化时候设置的 cb_函数回调指针,来处理每一个报文。有关套接字初始化,绑定,监听,接收。

2024-08-26 13:46:54 981

原创 【Linux】第十七章 多路转接(select+poll+epoll)

答:ET模式只有在变化的时候才会通知用户,如果是阻塞模式,客户端通知服务器取数据,然后服务器只取部分数据,剩下缓冲区中数据没有取出,文件描述符不会返回给客户端,客户端没有收到应答而不会继续发送数据,所以必须要采用。处理旧连接,调用read函数读取客户端发来的数据,调用read函数失败则poll服务器也直接关闭对应的连接,并将该连接对应的文件描述符从fds数组当中清除。处理新连接,调用accept函数将底层建立好的连接获取上来,调用epoll_ctl函数将获取到的套接字添加到epoll模型当中。

2024-08-26 13:45:28 719

原创 【Linux】第十六章 高级IO (五种IO模型+fcntl)

让IO变得高效,最核心的办法就是尽量减少“等”的时间。

2024-08-26 13:43:51 1004

原创 【网络编程】第十一章 数据链路层 - 以太网(MAC+MTU+ARP+MSS+RARP)

地址解析协议协议,根据IP地址获取MAC地址的一个TCP协议,是 MAC 帧协议的 “上层”,因为同一个局域网中发消息需要知道对方mac地址,而我们一般只知道ip地址,所以需要arp协议将ip地址转换为mac地址。根据MAC地址获取IP地址的一个TCP/IP协议,因为既然我们已经知道一台主机的MAC地址了,那么我们就已经可以直接向给主机发送消息了,因此我们可以直接发消息询问对方的IP地址就行了。以太网中所有的主机共享一个通信信道,当局域网中的一台主机发出数据后,该局域网中的所有主机都能够收到该数据。

2024-08-22 14:56:12 1281

原创 【网络编程】第十章 网络层-IP(分片组装+网段+路由+NAT)

将目的ip和路由表中子网掩码"按位与"之后得到网络地址,再和Destination比较,两者相等代表当前ip就是需要通过该项路由,此时通过Iface接口发出去,如果和Destination不相等,则继续与下一个子网掩码比较,以此类推,最后由default 默认路由发送出去。传输层一次向下交付的数据太多了会导致分片,数据链路层不支持过大的数据,这就需要在发送方网络层对数据进行分片,分片后的每片都有独立ip,分片会提高丢包的概率,影响传输速率。局域网中主机的私有IP 和 外网当中的某个公网IP之间的映射关系。

2024-08-22 14:55:28 1412

原创 【网络编程】第九章 传输层-tcp(协议格式+32序号+部首长度+标记位+窗口大小+三次握手四次挥手+滑动窗口+流量控制+拥塞控制+延时应答+捎带应答+面向字节流+粘包问题+UDP实现可靠传输)

一次握手没有回应不安全,两次握手,在服务器返回应答时如果丢包了,连接没有建立,也不安全。三次握手,第三次握手由服务器确认,说明第二次握手客户端收到了,此时就证明自己和客户端都是能发能收的,如果第三次握手服务器没有收到,服务器就会发送 RST 让客户端重新建立开始握手断开连接时要断开从客户端到服务器方向的通信信道,也要断开从服务器到客户端的通信信道,其中每两次挥手对应就是关闭一个方向的通信信道,因此断开连接时需要进行四次挥手。

2024-08-22 14:54:57 792

空空如也

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

TA关注的人

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