- 博客(111)
- 收藏
- 关注
原创 【刷题27】动态规划—斐波那契数列模型
状态转移方程:dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);初始化:i从2开始,因为要保证i-1和i-2不越界。dp[0]和dp[1]初始化为0,cost数组才是表示每条台阶有费用的。因为是每次向上爬一个或两个台阶,所以可以理解为本次花费为前一个台阶的花费与前两个花费的较小值。注意:楼顶——状态表示数组的最后一个位置不是cost数组的最后一个位置,要多加一个。返回值是楼顶位置,此时就是花费最小。
2025-01-19 22:59:53
392
原创 【刷题25】深搜——递归专题
注意:newhead其实指向的是val为2的节点2,图的意思是表示newhead在val为1的节点这层。注意:为啥是push_back。
2025-01-13 22:33:43
367
原创 5种IO模型
Input(输入)和Output(输出)。冯诺依曼体系结构中,数据从输入设备拷贝到内存,经过处理后,再从内存拷贝到输出设备。现实情况中,数据并不是那么流畅的进行拷贝操作,而是会进行“等”。比如系统调用recv,当读取条件不满足时,它就会阻塞,当读取条件满足了,拷贝数据并返回结果。所以总结一下,recv一共就做了两件事:等+拷贝 => IO=等+拷贝其他系统调用也是一样,比如send,当发送缓冲区满了,就会阻塞,直到有空间腾出来,才能进行发送数据。
2025-01-11 23:11:28
760
原创 HTTPS
https也是一个应用层协议,在 HTTP 协议的基础上引入了一个加密层数据摘要(也可以叫数据指纹)的原理是利用单向散列函数(Hash 函数)对信息进行运算,生成一串固定长度的数字摘要。数字摘要并不是一种加密机制,但可以用来判断数据有没有被篡改。
2024-12-28 15:56:58
1130
6
原创 cookie和session
HTTP Cookie(也称为 Web Cookie、浏览器 Cookie 或简称 Cookie)是服务器发送到用户浏览器并保存在浏览器上的一小块数据,它会在浏览器之后向同一服务器再次发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态、记录用户偏好等。
2024-12-25 20:44:45
638
原创 【刷题24】BFS解决拓扑排序
有方向,没有环的图结构入度与出度针对一个顶点来说的入度:有多少的箭头指向该顶点出度:该顶点有多少箭头指向其他顶点。
2024-12-24 21:24:58
304
原创 进程间关系与守护进程
作业是针对用户来讲,用户完成某项任务而启动的进程,一个作业既可以只包含一个进程,也可以包含多个进程,进程之间互相协作完成任务, 通常是一个进程管道。
2024-12-13 20:47:21
1003
5
原创 【刷题22】BFS解决最短路问题
思路:BFS+哈希表 找最短路径。如图:从A到I,怎样走路径最短。思路:BFS+哈希表。思路:BFS+哈希表。思路:BFS+哈希表。
2024-12-12 20:09:17
1170
3
原创 【刷题20】优先级队列(堆)专题
题目:建大堆如果堆不为空,取堆顶最大的两个元素,相减取绝对值再入堆如果堆里面只有一个元素,直接返回这个元素堆为空,循环结束,返回0public:// 默认是大堆while(!qp.pop();qp.pop();qp.push(k);return 0;
2024-11-18 12:43:56
364
原创 【刷题19】队列+bfs专题
思路:队列+bfs – 与上题大体相同(当前节点的孩子节点入队列不同)思路:队列+bfs(具体看注释)思路:用数组模拟队列。
2024-11-14 16:10:20
406
原创 【刷题14】哈希表专题
j = 0 会不会与找到的元素位置下标刚好为0(第一个元素)冲突?因为能到这步的前提肯定是中间的某个元素与第一个元素相加等于target;既然如此,那么遍历到这个中间某个元素是不是之间就已经遍历过第一个元素了,既然刚开始就是第一个元素,那么为什么不这时候找k值呢?k值不就是这个中间的某个元素吗,然后j肯定不是0,并且i不等于j,直接返回就结束了。哈希表统计每个元素出现的个数,大于等于2就返回true,如果没有返回false。哈希表<字符串,字符串数组>思路:哈希表<元素,下标>哈希表<元素,下标>
2024-11-03 19:31:26
415
原创 【刷题12】分治—归并排序
假如内循环是正常走完的,不是break跳出来的,那么根据前面说的,begin1>end1结束,所以内循环结束的下面理所应当要有一个break。但是假如是因为内循环的break到这里来的(ret+=后,begin1还是小于end1的),即内循环还没结束,外循环也没有,就直接跳出了,会出现各种问题。以上图为例:原数组的元素5是下标0,那么它的右侧小于它的元素个数,应该加在hash下标为0的位置上。思路:在逆序对的基础上改变应该条件:计算的是前面的元素比后面的元素的2倍大的个数。计算翻转对与合并分开写。
2024-10-21 19:42:55
980
6
原创 【刷题11】分治—快速排序
思路:建立一个小堆,先放k个元素,然后遍历剩余的元素,只要比堆顶大就进堆,往下沉。最后的堆顶就是第k大的元素。思路:快速排序—与前面相同,最后返回前cnt个元素。思路:快速排序(三路划分)
2024-10-18 14:48:08
436
原创 【刷题9】位运算专题
题目:使用STL的排序算法进行排序,只要是重复的字符必定是挨在一起的,所以可以遍历数组,有出现连续相同的字符就是有重复的代码:解法二:数组定义一个数组,大小26初始化为0,字符串的字符相对映射填入数组中,每个位置表示出现的次数,大于1次就说明有重复代码:解法三:位运算如果字符串的长度超过26个,必定有重复的,直接返回false定义的一个整型变量bitmap,它的比特位就是位图。如果位图的某一位已经存在,就返回false,否则填入位图中。遍历整个字符串后返回true代码:三、丢失的数字题
2024-10-12 18:34:12
836
原创 【刷题7】寻找数组的中心下标、和为k的子数组、和可被k整除的子数组
除自身以外数组的乘积>根据本题变形。思路:前缀和+哈希表。思路:前缀和+哈希表。
2024-10-09 21:00:07
341
原创 【刷题6】一维前缀和、二维前缀和
四、多开一个好放数据,同时满足l、r下标刚好对应上。一、前缀和,时间复杂度O(1),快速得到区间的值。三、使用前缀和,根据题目计算出区间。二、预处理,公式——一、预处理前缀和矩阵。
2024-09-30 23:47:04
350
原创 【刷题5】在排序数组中查找元素的第一个和最后一个位置
细节2:如果找完左端没有left=nums[mid],也是直接返回-1-1。,一旦相等就会死循环。或者说left=right就终止了。细节1:如果数组没有元素,直接返回-1-1;返回begin和end,是。取中点问题:取第二种。
2024-09-27 21:14:08
366
原创 【刷题4】最小覆盖子串
返回值:定义返回值ret,在判断里面截取字符串tmp,这里需要一个临时的字符串str,每次截取后赋值给str,然后如果ret为空,str直接给ret;ret不为空,比较ret和str的长度,只有str的长度小于ret的长度,才把str赋值给ret。定义变量count,统计有效字符的个数,用法与上一篇博客的两题一样,先进窗口,再判断count++;先判断count–,再出窗口。计算两个字符串的长度,定义两个哈希表,用其中一个哈希表先统计字符串t的字符出现个数。判断条件:count == 字符串t的长度。
2024-09-26 20:49:24
352
原创 【刷题3】找到字符串中所有字母异位词、串联所有单词的子串
哈希表2统计字符串p的每个字符出现的个数,然后遍历字符串s,先进窗口,相同的映射位置,哈希表1该位置的个数<=哈希表2的个数,count++(比目标数小才要++,超过了就不需要++,有等号是因为先进窗口)。如果超过固定长度,先判断哈希表的位置,哈希表1该位置的个数<=哈希表2的个数,count- -(比目标数大去掉也无效,小于了有效数就减少,等于是因为先判断的,后面要哈希表位置要减减),然后出窗口。循环次数:是单词的个数(每个单词的个数是相同的)固定窗口大小:words的长度 * 单词长度。
2024-09-25 21:18:24
325
原创 【刷题2—滑动窗口】最大连续1的个数lll、将x减到0的最小操作数
要让操作数的次数最小,就要让等于target的子数组尽可能大,然后用滑动窗口的思路做,返回值为:如果子数组中没有和等于target就返回-1,否则返回数组长度减去len(n-len),得到最小操作数。最右边和最左边的和为x,用一个变量sum统计数组所有的元素之和,sum-x就是剩下区域的元素,这个区域是连续的,可以用滑动窗口。要考虑target是负数的情况,如果是负数,直接返回-1,因为数组的每个元素都是整数。问题转换为:找到一个最长子数组,这个数组里面0的个数不能超过k个。
2024-09-23 21:22:50
460
原创 【计算机网络】传输层协议TCP
因为在前面两次的握手中,客户端发送信息,建立连接,服务端应答,客户端收到服务端的应答,才确定之前发送的信息服务端是收到。在数据传输的时候有建立连接的报文、正常通信的报文、断开连接的报文,总之就是通信过程中会收到各种各样的报文,而TCP报文是需要类型的,所以要区分报文的类型,标志位存在的意义就是区分不同的TCP报文类型。在等待的过程中,接收端的接收缓冲区里面的数据更多交给上层处理,即接收缓冲区空间更大了,这时再应答既可以确认前面的收到的信息,又能通知发送端可以发送更大的信息,提高了发送效率。
2024-09-23 18:21:10
2064
15
原创 【刷题—双指针】复写0、三数之和、四数之和
定义两个变量cur等于0,dest等于-1,让cur去遍历数组。如果cur指向的元素是0,dest往后两步,非0,往后一步。判断dest的位置,如果大于等于n-1,就停止操作,否则cur++
2024-09-21 21:37:50
389
原创 【计算机网络】传输层协议UDP
端口号标识一个主机上进行通信的不同的应用程序。IP+端口号就能确定互联网中的唯一进程。可以,一个进程可以有多个服务,比如tcp、udp,两个分别有各自的端口号,可以找到对应的客户端。不能,因为端口号是用来确定一个主机上的唯一一个进程,如果可以被多个进程绑定,就不具有唯一性。有些服务器是非常常用的,为了使用方便,人们约定一些常用的服务器,都是用以下这些固定的端口号。:应用层给多少,UDP发送多少,既不会拆分,也不会合并。一个进程是否可以 bind 多个端口号?一个端口号是否可以被多个进程 bind?
2024-09-20 16:06:40
1116
原创 【计算机网络】应用层序列化
用户在主机A发送消息给另一个用户主机B,消息序列化后通过系统调用到发送缓冲区,然后经过网络的每个分层到另一个主机,再自底向上到接收缓冲区,然后通过系统调用到应用层,再序列化变成用户可看到的消息。注意:系统调用让数据从用户层到发送缓冲区,或者从接收缓冲区到用户层,这个过程都是拷贝。用户发送一段数据先到C缓冲区,然后通过系统调用交给操作系统的管理区,发送的数据到task_struct,根据fd在文件描述符表找到位置,再指向指定的struct file,然后把数据传输到缓冲区,缓冲区会把数据刷新到磁盘中。
2024-09-15 17:37:25
1093
原创 【计算机网络】网络基础
到了数据链路层,封装了源mac地址和目的mac地址,这两个是会变化的,当前的源mac地址是A,目的mac地址是left,路由器其中的一个子网的数据链路层。路由器知道用户A要给用户B发信息,所以路由器的另一个子网与用户B联系,对源IP和目的IP地址重新封装,源mac地址和目的mac地址就发生了变化,源mac地址是right,mac地址是B,然后交给用户B,最后逐层向上解包与分用,用户B获取信息。TCP/IP协议栈是C语言编写的,双方传输使用的是同样的数据类型,所以,经过网络,双方一定能识别对方的信息。
2024-09-11 21:00:45
1546
8
原创 【Linux操作系统】线程的互斥与同步
总之就是两个人要竞争一把锁,如果拿苹果的人竞争性更强,每次都是他申请到锁,放苹果的人就没机会放苹果了,这也导致拿苹果的人每次申请到锁后去盘子上总是没有苹果拿,但是他又一直占用锁(每次申请到锁的都是他),所以放苹果的不能申请到锁放苹果,拿苹果的在盘子上也没有苹果拿,这就导致整个过程很不合理。又来了个线程2,此时线程1切换为线程2(注意:CPU执行线程1时是可以随时被切换的),线程1要带走寄存器中的1,然后线程2把0带入到寄存器中,再与内存的数据作交换,还是0,说明锁被其他线程占用,线程2就会挂起等待。
2024-09-06 14:25:55
946
10
原创 【Linux操作系统】线程控制
而线程也要到内存中读取,但是在CPU中,有一个硬件设备叫cache,作用是可以将当前读到的代码的周围其他代码和数据也一并交给CPU,这样下次遇到时,就可以直接在CPU处理了,效率提高了一些,工作也就少了。线程不一样是因为多个线程在一个进程内部,每个线程是一个进程的其中一个执行流,进程的所有资源(地址空间、页表、内存)都是可以给这些线程共享的,所以线程切换时,cache里面的上下文数据还在。线程分离了,但是资源依然是共享的,主线程先退出,那么整个进程就会结束,分离的线程也同样退出。
2024-09-05 08:42:44
1116
9
原创 【Linux操作系统】线程概念
对于进程,比较老的说法是加载到内存的程序叫做进程;修正后的说法是进程 = 内核数据结构 + 程序的代码和数据。对于线程,它是进程内部的一个执行分支,是CPU调度的基本单位。在地址空间的正文代码区,用户写的代码在进程中,都是串行执行的。换句话说,如果还有其他的进程(有多个进程),那么还需要开辟空间给新的进程创建地址空间和页表。这样就比较浪费时间和空间,即成本高。
2024-09-04 11:22:37
646
原创 【Linux操作系统】信号产生
2号信号是终止进程,用户可以让它的处理方式通过函数变成打印一句话和终止进程,终止进程的退出码为100,再把函数给系统调用接口signal。设置一个简单的闹钟,接口alarm,注意,闹钟设置的时间只是什么时候响,但是只响一次。2、信号到来时,如果此时有更重要的事情要处理,那么到来的信号要临时保存,即在合适的时候处理;4、信号的产生,是由别的进程产生的,当前的进程收到这个信号之前,在做其他的事情,是并发的。3、信号的产生是随时的,不能准确预料,所以信号是异步发送的;默认,就是按原来信号的处理方式进行处理。
2024-09-02 12:02:27
812
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人