- 博客(44)
- 收藏
- 关注
原创 35.LRU 缓存
使用map来保存缓存对象,每次使用后都先删除原来的键值对,再重新增加,让他放在最后,使用this.cache.keys().next().value来获取第一个键值对的键,即最长时间未使用的。3.在put方法中判断读取的键是否存在,存在就先删除原来的键值对(更新使用情况),以及键值对数量是否超过限制,超过限制就删除第一个键值对,最后统一添加要添加的键值对。2.在get方法中判断读取的键是否存在,存在就先删除原来的键值对,再重新增加,让他放在最后,然后换回他的值,不存在就返回-1。
2025-11-24 17:37:42
424
原创 34. 合并 K 个升序链表
2.定义合并两个链表函数,定义一个新链表,将两个链表的较小节点加入新链表,如果一个链表已经全部遍历完,将另一链表的剩余部分接在新链表后面,最后返回合并的链表。1.将原本数组中的每两个链表进行合并,将合并后的链表数组作为下一次合并的数组,直到数组中只有一个链表。每两个链表两两合并,直到只有一个链表。3.全部合并完成后返回最后结果。
2025-11-24 16:24:11
223
1
原创 32.随机链表的复制
先将每个节点复制一份插入在当前节点的下一个节点,再将随机指针复制,最后将两条链表分离开来。3.将原节点指回原节点,复制节点指向复制节点,将两个链表分离开来。2.根据原节点与复制节点的关系,找到复制节点的随机指针。1.在原本的每个节点后面都创建一个值相同的节点。
2025-11-17 21:28:38
194
原创 31.K 个一组翻转链表
2.反转第一段链表,保存当前节点的下一个节点,将当前节点的下一节点指向前一个节点,进行反转,然后将上一节点指针和当前节点指针都往前移,继续下一次反转。1.判断链表长度是否满足反转条件,如果链表长度小于k,则无需反转,直接返回。3.递归处理剩余链表,将下一段链表的开始作为头节点传进去。4.返回反转后的头节点,即pre,进行拼接和返回最终结果。将每一段链表反转,然后拼接在一起。
2025-11-17 09:17:01
189
原创 30.两两交换链表中的节点
1.设置虚拟头节点来作为第一个节点,头节点和下一个节点作为第二个和第三个节点。4.第一个节点的next指向第三个节点,断开于第二个节点的联系。5.将第一个节点的指针指到交换完的第一个节点上,继续下一次交换。2.第二个节点的next指向第三个节点的next。3.第三个节点的next指向第一个节点。使用三个节点,交换第二个和第三个节点。
2025-11-12 15:30:46
177
原创 29.删除链表的倒数第 N 个结点
2.重新遍历,如果删除的是第一个,直接会头节点的下一节点即可,不是第一个就将目标节点的前一个的next指向目标节点的next,绕过目标节点,即可删除。先遍历一次链表获取链表长度,再次遍历删除该节点即可。1.遍历一次链表获取链表长度。3.返回删除后的链表。
2025-11-12 15:00:05
178
原创 28. 两数相加
计算两个节点相加结果,如果大于9就保留一位进位,将和的个位数作为节点值,每次相加时要加上进位值,进位值只有0,1两种。2.将两个节点相加,如果一个链表已经遍历完了,就将他的节点值改为0相加,同时加上进位值n。3.如果和大于9,取各位保存在新节点中,同时保存进位值位1,不大于9则直接保存在节点中。4.将两个链表和结果链表的节点后移,若链表已经遍历完,则赋值为null,避免报错。5.两个链表都遍历完判断进位值是否为1,为一要在加个节点一。1.定义一个新的虚拟头节点用于保存结果。
2025-11-10 17:27:59
190
原创 27.合并两个有序链表
2.比较两个链表,按大小加入结果链表中,同时将节点后移一位,用于下次比较。4.当一个链表添加完时,将另一个链表的剩余部分接在结果链表的后面。比较两个链表的值,按大小添加进结果,再将对应链表节点后移一位。1.创建一个新的下虚拟头节点,用于保存后续排序的链表。3.添加完节点后结果链表的节点后移一位,用于下次添加。5.输出真正的头节点,即虚拟头节点的下一个节点。
2025-11-10 16:47:41
210
原创 26.环形链表 II
先通过快满指针判断是否有环,如果有环就将一指针重置于头节点,然后两指针同时开始遍历,再次相遇的节点即为环的起点。2.如果有环,重置一指针于头节点,然后同时移动两指针,再次相遇的节点即为环的起点。1.通过快慢指针来判断是否有环,两指针相遇说明有环。
2025-11-10 09:13:51
219
原创 25. 环形链表
2.快指针走两步,慢指针走一步,如果有环,则两指针一定会相遇,否则退出循环。使用快慢指针,如果有环,两指针一定会相遇,否则快指针先遍历完链表然后结束。1.初始化快慢指针为头节点。
2025-11-10 08:34:28
189
原创 24.回文链表(转数组)
把链表的值保存在数组中,然后从两端开始遍历数组判断是否回文。1.遍历链表,将链表的数据保存在数组中。2.从两端遍历数组,判断是否回文。
2025-11-10 08:19:04
172
原创 23.反转链表(迭代)
6.直到next为null结束,即遍历完所有节点。1.初始化当前节点为头节点,上一节点为null。3.将当前节点的next指向上一节点,反转链表。储存前一个和后一个节点,然后反转,再往前推进。4.上一节点变成当前节点,向前推进。5.当前节点变成下一节点,向前推进。
2025-11-09 15:52:21
180
原创 22.相交链表
两个指针分别从AB链表开始遍历,遍历完当前链表就遍历另一个链表,如果两个链表相交,就会有两个指针时指向同一个节点即交点的时候,否则就会遍历完两条链表然后返回null。2.设置两个指针分别遍历两条链表,直到两个指针指向同一个节点,如果没有交点,最终指针会指向null。1.判断两条链表是否为空,有为空的直接返回null。3.返回一个指针,指向最后的结果。
2025-11-09 10:55:51
129
原创 21.搜索二维矩阵 II
如果当前行的最后一个都比target小,说明肯定不在这一行,如果找遍整行都没找到,说明不存在这个数。1.判断第一行的最后一个数是否大于目标值,如果小于目标值,说明肯定不在这一行,直接舍弃这一行。2.如果大于目标值,说明就在这一行之中,只要一直判断最后一个数是不是即可,不是直接舍弃。3.如果整行都没有,即全部舍弃了,说明没有这个数。
2025-11-04 21:51:09
170
原创 19.螺旋矩阵(边界收缩)
3.判断是否还有剩余的行和剩余的列来决定要不要遍历下边界和右边界,如过收缩过的上边界和有边界大于下边界和左边界,说明已经没有剩余的行或列了,不用遍历了,防止重复遍历。按照顺时针顺序遍历各个边界,遍历完后就收缩边界。2.依次遍历上边界和右边界,并且收缩边界。1.设置四个边界初始值。
2025-11-03 19:51:02
225
原创 18.矩阵置零(原地算法)
将第一行和第一列拿出来做标记,然后遍历剩余的矩阵,如果该行或该列的第一个标记为0,就把该值赋值为0,空间复杂度为O(1)2.用第一行和第一列标记其他行和列是否需要置零,如果该元素为0,就标记该行和该列第一个元素为0。4.处理首行和首列,如果原本就有0,将整行或整列变为0。3.根据首行首列为0的元素将其他元素也变为0。1.检查第一行和第一列是否有0。
2025-10-27 21:00:07
264
原创 12.最小覆盖子串(滑动窗口+哈希)
2.用另一个map保存窗口内的目标字符的出现次数,当窗口内目标字符的出现次数与目标字符串内对应字符出现次数相等,说明这个字符已经满足了,valid+1,当valid和目标字符串种类数相等时,则窗口内已经包含了目标字符串。判断窗口内的字符串是否满足字串条件,满足则将左边界右移,看是否有更小值,因为可能会有重复的字符。5.遍历完字符串后,看最小值是否存在,存在就根据起点和最小值输出字符串。3.记录窗口内的当前值,如果小于最小值,就更新最小值和字符串起点。4.右移左边界,排除重复项,看是否还有更小值。
2025-10-20 16:30:59
351
原创 11.滑动窗口最大值(单调队列)
2.移除掉队列中比当前元素小的值,因为他们不可能成为最大值,这样也保证了队列是单调递减的,队头为最大值。设置一个单调队列,保证队列内是单调递减的,这样队头就是最大值,只要队头还在窗口内,最大值就是队头。3.判断队头是否在滑动窗口内,如果左边界大于队头,说明队头已经不在窗口内,将队头弹出。4.判断窗口内元素是否满足k个,满足k个后才开始输出最大值。1.遍历数组,将数组元素下标加入队列。
2025-10-19 17:51:23
126
原创 10.和为 K 的子数组(子串)
使用前缀和与哈希表结合,要得到sum[i,j]的和为k,说明sum[0,j]-sum[0,i-1]=k,即sum[0,j]-k=sum[0,i-1],以sum为键,出现次数为值,总的次数为就为对应的值累加。
2025-10-16 15:32:27
194
1
原创 9.找到字符串中所有字母异位词(滑动窗口)
3.当两个map中的计数相等时,进行遍历比较两个map。若完全相同,说明是异位词,将left添加到结果数组中。无论两个map是否相等,窗口都将右移一个单位,将map2中的计数减一。2.遍历字符串s,如果当前字符不在目标字符串里,说明肯定不是,清空当前窗口字符串,并将窗口左端移到下一个位置。若在目标字符串里,就增加map2对应的计数。使用滑动窗口和哈希结合来判断窗口内字符串是否与目标字符串为异位词,比较键名和值(字符出现次数)1.将目标字符串转化为map对象,字符为键,出现次数为值,保存为map1。
2025-10-15 16:08:11
678
原创 2.字母异位词分组(哈希法)
字母组成相同的字符串所有字母经过排序后是相等的,可以将排序后的字母作为key,将包含相同字母的字符串的数组作为value,最后输出所有value的数组。
2025-10-12 19:26:56
162
原创 面试总结(四)(es6新特性,promise的状态及缺点,浏览器渲染过程,git将a分支的某次提交移动到b分支上,防抖和节流,隐藏超出范围文本,自适应宽度布局,深浅拷贝)
es6新特性,promise的状态及缺点,浏览器渲染过程,git将a分支的某次提交移动到b分支上,防抖和节流,隐藏超出范围文本,自适应宽度布局,深浅拷贝
2025-04-29 19:41:43
875
原创 面试总结(二)(vue2响应式,插槽,生命周期,组件通信方式,css布局,计算属性和监视属性,组件封装,自定义代码集,性能优化,权限管理,长连接对话中断,流式输出,心跳机制)
vue2响应式,插槽,生命周期,组件通信方式,css布局,计算属性和监视属性,组件封装,自定义代码集,性能优化,权限管理,长连接对话中断,流式输出,心跳机制
2025-04-28 11:32:03
1089
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅