- 博客(111)
- 收藏
- 关注
原创 在做题中学习(74):比较含退格的字符串
'#'时 push_back(s[i]) 出栈:s[i] == '#' 的时候,并且s.size() > 0,pop_back(s[i])循环结束得到结果。注意:如果真的用stack来模拟的话,最后赋值给string后,需要reverse逆序。细节:因为这题两个结构都是string,且都需要相同逻辑判断,所以单独封装个函数,减少代码量。思路:不用真的定义一个栈,用字符串string来模拟栈的行为。
2024-11-05 19:03:00 198
原创 在做题中学习(73):删除字符串中所有相邻重复项
入栈:push_back(s[i]) 出栈:s[i] == s.back()的时候,并且s.size() > 0,循环结束得到结果。注意:如果真的用stack来模拟的话,最后赋值给string后,需要reverse逆序。思路:不用真的定义一个栈,用字符串string来模拟栈的行为。
2024-11-04 22:09:56 354
原创 在做题中学习(72):最小栈
思路:stack里存pair,push时,first存当前值,而每次push都要更新pair的second,使它成为更小值,最后的getmin,只用取top().second即可拿到最小值。
2024-10-31 19:21:55 437
原创 在做题中学习(70):用栈实现队列
可以看出:其实在实现peek的时候,就需要push栈栈底的元素了,此时就需要把元素倒到另一个栈,里面myqueue的pop就可以用peek封装再pop实现。倒数据的条件,如上图。
2024-10-30 14:08:36 301
原创 在做题中学习(69):K个一组翻转链表
注意:到下一组逆序时,要考虑在谁后面连接?在下面代码的实现里,循环一组的k个长度时,不要用while(k--),这样会改变k的值,在下一组中k就会变0,无法继续。2.再进行n组k长度的链表的逆序(带虚拟头节点的头插法)思路:1.先求出链表长度,看可以分几组。
2024-10-24 15:35:29 521
原创 在做题中学习(68):重排链表
思路:slow走一步,fast走两步,这样fast走完,slow就能走到中间节点(奇数是中间,偶数是右边那个),再带虚拟头节点的头插法逆序后半部分链表,并且让slow节点的next置空,最后用虚拟头节点尾插分开的两个链表即可。注意:在leetcode链表OJ中,每次解引用结点,都得判断是否为空,否则它会判你解引用nullptr报错。
2024-10-23 20:16:04 353
原创 在做题中学习(67):两两交互链表中的节点
思路:引入一个虚拟头节点,让next指向head,并且在交换时,不要吝啬空间,多定义变量往后走,只要变量定义的足够,就不用怕连接的顺序问题,之后交换完1,2,让四个变量迭代。奇数个节点,考虑next是否为空,为空就结束循环。偶数个节点,考虑cur是否为空,为空就结束循环。
2024-10-23 20:15:46 200
原创 在做题中学习(66):两数相加
思路:定义一个变量t,存储相加后的结果,个位赋给新节点,十位(表示有进位)留下,累加到下一次加法(相当于+上进位)。while里即便cur1和cur2都为空了,但上次的t还存在进位,就继续添加节点,所以t也需要在while判断。
2024-10-22 22:01:51 213
原创 在做题中学习(64):提莫攻击
如果 b - a >= duration 那中间的时间段,就会受到duration秒中毒时间。如果 b - a < duration 那中间的时间段,只会遭受 b - a秒中毒时间。到最后一个数字,是最后承受中毒伤害的时间点,所以直接+=duration;思路:当timeSeries中的相邻两个数:a b ,
2024-10-21 15:21:24 429
原创 Reactor反应堆模式(流程图 + 代码)
网络/同步IO/Reactor · 伊人paranoid/Linux系统和网路编程 - 码云 - 开源中国 (gitee.com)
2024-09-12 19:25:32 302
原创 网络协议,OSI,简单通信,IP和mac地址
2004年,小明因为给他爹打电话(座机)费用太贵,所以约定一种信号,响一次是报平安,响两次是要钱,响三次才需要接通。
2024-06-15 19:30:45 920
原创 Linux————[多线程详解]
对于一个虚拟地址: 前10位 对应页目录中的地址 中10位 对应页表的页表项的地址 后12位 刚好2^12次方是4KB,所以就是页内偏移, 找一个物理地址: 通过页表项(页框)对应的起始物理地址+虚拟地址后12位对应的数据,就可以访问整个页框的数据。对于一个虚拟地址: 前10位 对应页目录中的地址 中10位 对应页表的页表项的地址 后12位 刚好2^12次方是4KB,所以就是页内偏移, 找一个物理地址: 通过页表项(页框)对应的起始物理地址+虚拟地址后12位对应的数据,就可以访问整个页框的数据。
2024-06-10 21:28:42 2306
原创 在做题中学习(62):矩阵区域和
思路:读题画图才能理解意思:dun点点的是mat中的一个数,而要求的answer同位置的数 = 以点为中心上下左右延长 k 个单位所围成长方形的和。填answer时,是用dp的值,而dp的值是从[1][1]才生效的。就是:填dp[1][1]时,公式的mat值是mat[0][0]的。
2024-05-29 22:00:10 1438
原创 在做题中学习(61):连续数组
第 i 个元素的前缀和正好是 0 ,那么前面数组的长度就是-1。不用,因为算和为0长度时,sum越小,算的长度越长。先处理前一个,再将当前值存入哈希表。和为0的子数组长度:i - j;转变为:找到和为0的最长子数组。转化:将 0 ——> -1。前缀和 , 长度。
2024-05-24 17:11:17 306
原创 在做题在学习(60):和可被K整除的子数组
同余定理:而此题要求返回能被k整除(%k = 0)所以子数组的个数,如下图:把问题转化为——> 有多少个前缀和的余数 == sum%k???
2024-05-24 17:11:05 453
原创 在做题中学习(59):除自身以为数组的乘积
的范围是:[i+1,n-1]所有元素的乘积 这样处理answer[i] = f[i] * g[i] 就可以完美得出最终结果。思路:answer中的每一个元素都是除自己以外所有元素的和。那就处理一个前缀积数组和后缀积数组。所以f[0] = 1 g[n-1] = 1。是:[0,i-1]所有元素的乘积。
2024-05-14 15:58:15 233
原创 在做题中学习(57):寻找数组的中心下标
边界情况,如示例三,中心下标在最左端/最右端,那么此时所在位置的前缀/后缀和 = 0。思路:要看一个数是不是中心下标,就看他前面数的和 与 后面数的和 相不相等。前缀和 /后缀和 遍历时,越过1 / n-1 ,原因是求和公式会越界。前缀和,正着遍历原数组;后缀和,倒着遍历原数组。
2024-05-10 16:51:45 336
原创 在做题中学习(56):二维前缀和模板
就是算A+B+C+D的和。而在此中,直接求B,C的值可不好求,因为在之前的dp数组中找不到(这就与一维数组的dp不同了),所以结合一下,先求A+B,A+C的和,再减去多加的A即可。要求的是(x1,y1) - (x2,y2)这段区间的和。和一维前缀和一样,需要有一个同等规模的。
2024-05-10 11:25:49 814
原创 在做题中学习(55):一维前缀和模板
因为如果说题目的 l 是可以 = 0的,那么求[0,2] 就是dp[2] - dp[-1]了,而下标怎么能为负数呢,所以此时需要单独处理判断,而下标从1开始的话,l最小 = 1 [1,2],就是 dp[2] - dp[0] 了,此时只需要让。既然要求(l,r) 区间的和,而dp数组已经有dp[r] 和dp[l-1]这一段的值了,所以dp[r] - dp[l-1]就可以算出(l,r)区间的值。(1,2) 区间 就是算出1 2 4 中 1,2下标对应值的和,1+2 = 3。用来快速求出一段连续区间的和。
2024-05-10 10:51:18 573
原创 在做题中学习(54):点名
解法三:位运算 搞一个和原数组大小相同的数组,和原数组进行异或,最后看看剩下是哪一个数即可。O(n)空间+O(n)时间。解法二:哈希表 把原数组丢入哈希表,遍历哈希表,看看哪个数值为0即可。O(n)空间+O(n)时间。解法四:高斯求和 求和公式算出结果后,依次 - 数组中的元素,被减数剩下的就是结果。处理边界情况:如果数组缺的正好是最后一个位置,那么需要特殊处理。可以看出,数组和下标的对应关系,解法一:暴力枚举 O(n);对应的下标,就是缺的那个数字。
2024-05-10 10:13:23 452
原创 在做题中学习(52): 山脉数组的峰顶索引
由题目可以知道,i的左边比i小,右边比i大,所以数组具有二段性->二分法没跑了,再看图,如果左区间已经跑到了i位置,那么就可以返回这个值了,所以只要求出左区间右端点就可以求出最终结果的下标了。因为这题求的是区间的右端点,所以求中点的方法是:mid = left + (right - left + 1) /2。求出每次的mid,如果落在右区间,right = mid - 1;求出每次的mid,如果落在左区间,left = mid;
2024-05-08 08:25:38 379
原创 在做题中学习(51): x的平方根
这一题的范围虽然在int范围内,但是中间判断逻辑是 1^2 2^2(1*1 2*2)这样的相乘逻辑,肯定会越界,所以用long long int.可以看到8的平方根是2.82,在2^2和3^2之间,所以可以把数组分为两部分,(此题没有数组,但可以直接用两个整数来模拟。而2.82去掉小数部分会变为2,所以。边界情况:0,单独判断。
2024-05-07 15:54:44 371
原创 在做题中学习(50):搜索插入位置
因为有示例3这种,数组元素都比target小的情况,所以此时单独判断,如果数组最后一个元素=target区间的左端点时,它的下标正好是要被输出的下标,所以。2.用求区间左端点的方法解决这道题。1.数组有二段性,可以用二分。
2024-05-07 15:38:13 369
原创 在做题中学习(49):排序数组中查找元素的第一个和最后一个位置
题目要求:时间复杂度为:O(logN),而且是有序数组,那一定就是二分法解决了。
2024-05-01 18:43:34 1618
原创 在做题中学习(48):朴素的二分查找
因为此数组为有序的数组,所以可以每次取数组中心元素来比较,target就往左移动,之后由新的left right更新mid.for循环中,从nums[0]枚举到nums[n-1],依次判断,返回 == target的值。
2024-05-01 17:56:27 391
原创 信号的产生,保存,处理
用signal自定义闹钟的行为,第一次响了以后,换成2秒响一回,并打印上一次闹钟的剩余时间。而当循环里,count走到10的时候,取消闹钟。
2024-04-21 21:07:39 896
原创 c++11详解
语法上,左值引用和右值引用都是取别名,左值引用给左值取,右值引用给右值取。底层上,引用是用指针实现的,左值引用存当前值的地址,右值引用是把当前右值拷贝到栈上的临时空间,存储它的地址。
2024-04-01 20:35:43 282
原创 哈希表(散列表)
红黑树结构的一系列关联式容器,在查询时效率可达到O(log_2N),即最差情况下需要比较红黑树的高度次,当树中的节点非常多时查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,以便这样操作。
2024-03-19 20:23:46 249
原创 红黑树笔记分享
红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。
2024-03-14 10:03:11 435
原创 基础IO笔记分析
a. 文件 = 内容 + 属性b. 访问文件之前都需要先打开文件,再做修改,而做修改都是用执行代码的方式完成,比如文本编辑器,它是一个程序,被加载到内存变成进程后,运行内部代码来调用接口,把文件加载到内存中。c. 因此其实是进程在打开文件d. 进程可以加载多个文件进内存,所以操作系统会先描述在组织成一个个结构体,每个文件结构体存放下一个文件的指针,再以链表的形式链接起来,转变为对链表的增删查改。e. 进程和文件的关系, struct task_struct 和 struct XXXX。
2024-03-03 20:24:00 266
原创 STL————map和set容器笔记分享
vector、list、deque、forward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。
2024-03-03 17:51:43 183
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人