![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
大臣的刷题日志
文章平均质量分 70
记录日常刷题
BearPot
你太容易因为别人优秀而焦虑 你需要的是平静的把自己的事做好
展开
-
373. 查找和最小的 K 对数字 ,为什么要先把一个数组的下标都插入
找出第一个最小数对之后寻找下一个,由于数对 {1, 2} 在 num1 和 num2 内的下标分别为 0 和 0,考虑到数组是有序的,所以下一个最小数对在 num1 和 num2 内的下标可能是 1 和 0 或者 0 和 1,其中下标为 1 和 0 的数对 {7, 2} 已经在堆内,所以只要添加数对 {1, 4} 即可。可以发现这个添加的数对 {1, 4} 的下标和已经找到的前一个最小数对 {1, 2} 的下标的区别是,在 nums1 的下标不变,在 nums2 的下标加 1。,其中第一个元素来自。原创 2023-09-06 13:26:21 · 101 阅读 · 0 评论 -
手撕LFU缓存
为了方便操作,给双向链表加上了虚拟的头结点和尾结点,并在初始化的时候首尾相接。因为LFU多了频率,所以需要重构结点,,就不像LRU那个一样用pair对组了。这里需要用到的有,插入,删除结点,以及链表判空,和返回链表最后一个尾结点。所以针对LRU的模仿写法,我就直接用STL的list去做。为了确定最不常使用的键,可以为缓存中的每个键维护一个。下面是我们自己实现的双向循环链表的写法,代替list。是LRU的升级,多了一个访问次数的维度。使用计数最小的键是最久未使用的键。操作,使用计数器的值将会递增。原创 2023-08-15 18:59:20 · 181 阅读 · 0 评论 -
376. 摆动序列
这个题可以用动态规划和贪心,我那天写的时候自己发现一个巨简单的思路,看了之前自己抄的题解和网上的题解,讲解的都很麻烦,各种坡度等等。可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为。连续子数组 [4,-1,2,1] 的和最大,为 6。第一个差(如果存在的话)可能是正数或负数。这篇博客就记录下,我的写法。原创 2023-07-06 10:46:05 · 131 阅读 · 0 评论 -
有关回溯问题,总结的细致要点
组合的:组合去重:用used数组初始化false,记录当前层这个值用过没used数组最好别用bool,用int好点,我后面出文章说为啥少用vector我推荐的写法: 不用used了for里面加// 要对同一树层使用过的元素进行跳过continue;也能用set去重// 控制某一节点下的同一层元素不能重复continue;// 记录元素递归注意递归完了set不用erase,,因为set是记录每层,每层都会创建一个的组合和子集,三种不同的去重方式,个人推荐,这种,代码少。原创 2023-06-25 19:01:11 · 367 阅读 · 0 评论 -
前缀和以及map混用,打开思路
我们通过前缀和数组保存前 n 位的和,presum[1]保存的就是 nums 数组中前 1 位的和,也就是 presum[1] = nums[0], presum[2] = nums[0] + nums[1] = presum[1] + nums[1]. 依次类推,所以我们通过前缀和数组可以轻松得到每个区间的和。精华如下图:我们只要统计各个阶段前缀和出现的次数,只要有能和k组成新的前缀和的,那就说明k也是存在的,且presum-k的次数不就是k出现的次数吗,,还是两数之和的问题。原创 2023-06-21 09:27:35 · 517 阅读 · 0 评论 -
需要动脑袋的双指针:581. 最短无序连续子数组
考虑更复杂的情况,相当于遍历中每一次都要更新max,然后比较当前的值和max的关系,如果小于max,则说明存在逆序(因为max肯定是在之前被更新的),就更新一下无序的右边界,最后被更新到的就是最终的右边界。这个思路用到的想法就是,前后有两段有序的部分,在有序的部分,你从左往右更新max肯定是在一直更新的,从右往左更新min也是同理,但遇到了无序的部分就不一定,下个元素可能会小于max,也可能会大于min。从右往左更新min的时候,先是15,然后9,遇到10了逆序记录左边界,然后min更新成8,然后4,原创 2023-05-12 15:16:29 · 632 阅读 · 0 评论 -
拓扑排序应用,207.课程表
主要是需要一个数组,去记录着当前结点以及他指向的结点数组,,是个二维的。还需要一个判断是否被标记了的数组,如果走过了这个结点那么就标记1,如果这个结点相关的走完了,也没有环,说明这个结点是ok的,那么就在标记他是-1,说明这个结点相关的构不成环。当然这俩就算是退出条件了,当然还有如果这个结点后面没有关联的结点,比如(2,2)这种,他就是单独的。如果出队的次数count等于课程总数,则证明可以完成所有课程的学习。出队:已经学习了的课程数加一,其所有后续课程的入度减一;在选修某些课程之前需要一些先修课程。原创 2023-04-17 14:00:00 · 162 阅读 · 0 评论 -
剑指offer(字符串替换问题)
题目一:函数将字符串中的字符‘※’ 号移到字符串的前部分,前面的非‘※’字符后移,但不能改变非字符的先后顺序,函数返回串中非’*'字符的数量。(要求尽可能的占用少的时间和辅助空间)。例如:原始串为"au※※toc※※h※※i※ps",处理后为"※※※※※※※autochips",函数返回9。方法一://额外创建一个数组,先遍历一遍,统计*的个数x,在新数组中前面添加x个*//然后再遍历一遍原字符串,将非*添加到新数组,最后将新数组内容拷贝到原字符串代码实现:int Changes原创 2021-11-12 13:29:27 · 3327 阅读 · 0 评论 -
C语言实现替换空格为%20(剑指offer)
项目场景:在网络编程中,如果URL中有含有特殊字符,如空格、’#'等,可能就会导致服务器无法获得正确的参数值,所以需要我们把这些特殊字符进行替换,替换为服务器可以进行识别的字符问题描述:实现函数,把字符串中的空格替换为"%20"例如:把字符串"We are happy“中的空格全都替换为”%20",替换之后字符串就变为了"We%20are%20happy"问题分析:替换空格,我们需要做的是判断是否为空格,若果是,那么后面的字符统一后移两位(因为%占了空格的位子,所以移动两位),我们原创 2021-11-08 17:27:00 · 1496 阅读 · 0 评论 -
带着刚刷题的你一步步学会刷题:989. 数组形式的整数加法
既然能相加了,我们干嘛需要额外再创建一个res数组了,我们直接在原数组num上面去操作,这样的话我们把k转为数组之后,不知道num和k哪个大,我们想要的是短的数组加在长的数组上面,因此呢我们做个长度的判断,让num是长的数组。这是一道痕经典的题目啊,考的就是数字数组转换,思路不难,但是在写的时候一步一步改代码,去优化复杂度,也是有助于学习的,今天刷了一下,也分享出来,建议刚开始刷题的友友们可以做一做。本以为过了,可惜呀力扣测试数据int会溢出,那么数组转数字还能溢出,数字转数组总不可能溢出了吧。原创 2023-01-06 17:44:09 · 485 阅读 · 0 评论 -
拿捏几道经典的字符串模拟问题
遍历整个字符串paragraph,用一个word去记录每次遇到的字母,只要是正常的字母我们就添加到word上面,如果遇到了空格或者标点了就说明我们这个单词记录完毕了,在单词列表里用find去查询此时记录的word,如果没找到说明可以把它记在map里面,然后每次做完这个判断就把word置为“”,用来进行下一个单词的组装。我发现这种字符串的问题其实写起来很麻烦,可能思路不难多少都能想到一些,主要就是代码的处理,细节问题。太考验代码编写的能力了。找到开头连续的0,找到结尾连续的0,再找中间连续的最大0。原创 2023-01-10 11:57:54 · 631 阅读 · 8 评论 -
手撕LRU缓存
put方法,先看key存在不,存在,修改key对应的value,把key放到头部,这一步直接调get方便;如果不存在,看缓存满了没,满了就删除一直没用的,因此每次我们都把新用的放在了头部,因此没用的肯定就是最后一个,所以就删掉最后一个,把要新添加的加在头部。get方法,先看key存在不,不存在返回-1;存在了把他放到头部,返回结果。下面是手撕代码:直接用了list,你也可以自己写一个双链表。要求复杂度达到O1,用哈希和双向链表。掌握list的splice方法。请你设计并实现一个满足。的平均时间复杂度运行。原创 2023-01-02 12:56:03 · 669 阅读 · 1 评论 -
LeetCode 79.单词搜索
如果不会做了可以看看我的岛屿问题记录,系列问题点进去可以自主跳转,或者我们刷题专栏也把岛屿相关问题都做过记录了,可以翻翻看看。我一刷的时候按照dfs模板,岛屿模板写的,不过用的方向数组写的,稍微简化了代码,详情看代码。一道非常类似岛屿问题的题目,都是此路不通回溯上一级去找其他位置,还是四个方向。LeetCode:200.岛屿数量_Oorik的博客-CSDN博客。原创 2023-01-02 12:55:36 · 91 阅读 · 0 评论 -
面试题61. 扑克牌中的顺子
2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。晚上做了道题,写完看了大佬的题解发现自己很蠢,思维不够光想着模拟了,来回考虑细节磕磕绊绊写完这么一道题。虽然也是写出来了,复杂度都是ok的,不过代码长,处理细节麻烦。写完之后过了,因为这是一道简单题,我还写了半天,通过之后没用沾沾自喜。去看题解,感觉自己的智商被侮辱了,我做的这么多if判断,被大佬一句。说了大小王默认是0,可以当做任何数,题里没说给的数组是有序的。今晚世界杯决赛,这个时候阿根廷2:0法国。原创 2022-12-18 23:49:39 · 520 阅读 · 4 评论 -
LeetCode 297. 二叉树的序列化与反序列化
学过二叉树肯定写过前中序去恢复二叉树,后中序去恢复二叉树。大概意思就是给你一个二叉树,把他转成一个字符串,中间的自定义规则由你定,再根据这个字符串去还原这个二叉树,这道题的话思路不难,写起来有的细节要处理,反正我也是搞了好一会搞出来了。要把他转成字符串,考察的就是遍历顺序,在这里前序 后序 层序都是可以的,为什么中序不行。遇到'#'下标跳过,遇到结点跳过,这样的每次都会跳到' ',因此进入递归前下标还得++一次。首先自定义规则,遇到空结点我们用'#'去代替,每次结点之间拿空格去分开' '原创 2022-12-17 13:45:00 · 431 阅读 · 1 评论 -
求1+2+…+n,不用乘除,if,while,for,三目运算符等
要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?搞完咯,最近没有搞什么很高质量的博客,都是学到什么,记一点主要还是方便自己看hh。题解各位大佬说了很多种方法,算地址啊等等,反正我这榆木脑袋看着费劲,太菜了。这题就是一个一步一步深化思路的问题,递归需要if或者三目运算符去判断。可以直接用公式,不过有乘除。可以迭代,不过有循环。原创 2022-12-22 08:45:00 · 442 阅读 · 0 评论 -
Union-Find并查集的模板
昨天刷到有关并查集的题684,685,之前对于并查集只是听过,刷这俩题的时候查了资料好好学习了一下,有关并查集的概念理论这里就不多赘述了。贴一版自己写的并查集的代码模板,(已经路径压缩,优化过的),加上注释,以后方便看代码去理解。原创 2022-12-09 16:40:45 · 138 阅读 · 0 评论 -
Leetcode 72. 编辑距离
最近在写dp问题的时候,写到这个经典题,对于里面三个转换方程没太懂,偶然在评论区找到一个非常非常清楚的解释,顺便就把这道题记录一下,加上自己的理解,方便日后查看! 对于这一类的dp习惯性的都初始化dp的大小为要求size的+1,因为这样方便处理0位置,去进行初始化,后面遍历的时候从1开始遍历就行。下面写写自己的理解和总结代码示例:好忙好忙好忙·原创 2022-12-05 14:19:34 · 453 阅读 · 0 评论 -
剑指offer(从递增的二维数组查找特定值)
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。......原创 2022-08-12 21:57:08 · 321 阅读 · 0 评论 -
LeetCode 84.柱状图中最大的矩形
这道题的话三种方法都写了,双指针会超时,优化一下备忘录是可以的。不过这篇还是分享一下用单调栈的做法。毕竟上一道题我没写这种方法哈哈哈。这道题根上一篇我分享的接雨水类似,都是可以用双指针,动态规划(双指针加备忘录),单调栈来算。有关单调栈的一些简单介绍可以看看甜姐的视频,我贴在这里了。这篇重点还是在将这道题,用单调栈的思路来说。今天还是分享一道才刷过的题目,单调栈一般解决的问题都是类似的,原创 2022-11-25 11:15:00 · 872 阅读 · 4 评论 -
LeetCode 42.接雨水
这篇记录一下刷接雨水这道题的过程,日后回顾写这道题要知道雨水怎么算。核心就是要算你要能接水说明你得是个凹才可以,比如上面第一个雨水,那一列是空的左边高度是1,右边是2,取个最小的减去当列的高度,就是你当列能接多少水那么第一种方法就出来了,暴力去找每一列的两侧的那个高柱子,就去计算雨水,然后把每次计算的雨水累加就行。原创 2022-11-21 17:31:43 · 853 阅读 · 5 评论 -
01背包问题总结
本篇博客是看了卡哥的动态规划章节之后,总结了一下模板和一些问题,其实去年也写过01背包的文章,今年就当重新复习,更加深入的总结了一下,顺便带上用一维数组(滚动数组)去解决这个问题的思路和写法。之前的文章链接本篇纯属方便自己日后回过头来看,要想详细了解的可以去看看卡哥的讲解。太顶了!原创 2022-11-18 22:08:10 · 156 阅读 · 4 评论 -
二分查找的模板
用二分去找目标值的左边界和右边界的问题,当然我们可以去先普通二分找到目标值,再在这个目标值的位置开始左右去线性探测找左右边界,但是当目标值重复太多,你这么写二分就不是二分了,不就是On线性去找。左闭右开来写,注意的就是当中间值大于目标值的时候,right可不是mid-1,而是mid,因为右边是开的。这篇博客的二分用的都是左闭右闭的区间,对于二分来说还是我还是习惯这样写。所以这里写的都是纯二分的思路,还是用左闭右闭去写,好好体会代码逻辑。,我分开写去分别表示左边界和右边界。最传统的二分查找,用左闭右闭写。原创 2022-11-10 15:44:03 · 560 阅读 · 0 评论 -
LeetCode 752. 打开转盘锁
今天在看bfs模板的时候看到了一个题目,解密码锁的这道题,半天也没啥思路和行动力,看了人家的java版的注释,花了40分钟才搞懂这个题,也真的是菜。写完之后发现这个题目还可以去优化,用双向bfs去解决,我就先把最初一般的传统bfs写在这里记录一下,双向的等后面再学习补充把。整体代码写起来也挺麻烦的。bfs放在二叉树里就是层序遍历,放在图就是一个结点向四周发散,求最短路径的时候一般都bfs,dfs一般都拿递归来整,深度的,一条路走到死。下面我把代码粘出来照着思路和我的注释看懂没问题,原创 2022-11-12 19:45:00 · 660 阅读 · 0 评论 -
LeetCode:402. 移掉 K 位数字
移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。从原数字移除所有的数字,剩余为空就是 0。给你一个以字符串表示的非负整数。这道题就是个贪心加单调栈的问题。具体的和简便的我都放一起注释了。原创 2022-11-04 20:28:18 · 99 阅读 · 0 评论 -
Leetcode:452. 用最少数量的箭引爆气球
在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。有的人说那2-8,7-10也有公共区间,一箭双雕也可以,但是如果这两个气球用一个弓箭的话,剩余两个是不是都是一箭一个,总共需要3个了,就不是最优解了不是?拿到这个题,打气球,用最少的弓箭去打尽可能多的气球,怎么做呢?画图示例就以力扣的示例1,points = [[10,16],[2,8],[1,6],[7,12]]为例子。原创 2022-11-04 20:28:32 · 193 阅读 · 2 评论 -
LeetCode:1905. 统计子岛屿
不知道怎么去操作两个岛屿去比较,但在做所有岛屿的问题的时候,我们都会有一个操作就是淹了土地,那么这个题同样,我们可以不去操作grid1,而是在grid2里面去dfs操作把不是子岛屿的都给淹了,然后你再grid2里面去找,就全都是子岛屿了。前面说的都是在一个岛屿上去操作,这道题就是给你两个岛屿,让你找出grid2的上的岛屿,且是grid1上的子岛屿的岛屿个数。刚开始看这个题可能有点蒙逼,其实解法不难。就是需要一个思路的转变。原创 2022-11-03 20:16:42 · 745 阅读 · 0 评论 -
LeetCode:695. 岛屿的最大面积
而对于这道题来说,求面积,那么就是求我们在一整块岛屿里淹的土地的最大块数,因此需要给DFS一个返回值,计算每次淹了的块数,然后在主函数遍历里去比较最大的记录下来就行。我们做岛屿数量的时候,遇到土地去遍历他的周边,遍历一块淹一块,最终整个二维数组的结果都会是海水,因为全被淹了,每次去遍历的时候遇到一个完整的岛屿那么计数器就++这道题就是在岛屿数量的基础上,计算一下每次dfs算的岛屿土地的大小。这道题是问岛屿的最大面积,其实就是问各个岛屿的土地谁多。上面矩阵,最大面积就是橘色的那块,结果最终返回6。原创 2022-11-03 20:16:12 · 192 阅读 · 0 评论 -
LeetCode:1020. 飞地的数量
那么这道题就很简单了,只要做了上道题,我们知道把整个图遍历的过程中就会把用不上的土地(边缘土地),和原本的海水都填成海水,那么当走到所求结果的土地时我们dfs,如果顺利那么计数器++,就说明这是一块岛屿。而这道题不问岛屿,问土地,那么久更简单了,我们走到结果土地的时候都不要dfs,只需要继续遍历看他有几块土地,计数器++就好,因为其他地方用不上的土地(边缘土地)在我们进行检查的时候都被填成海了。而这道题问的是你土地的数量,同样的不包括边缘的土地。,我们只需要删去一行代码又可以完成这道题目了哈哈哈。原创 2022-11-01 11:48:22 · 96 阅读 · 0 评论 -
LeetCode:1254. 统计封闭岛屿的数目
这道题跟上一道唯一的区别就是求封闭,怎么个封闭法,就是把靠边的那些土地全部都当做海水来计算,(只计算内陆岛屿)岛屿类型的题目是练习DFS和BFS的常见题目,前面我有写过统计岛屿数量的题解,用dfs和bfs都写了一下。这个图的封闭岛屿只有最终间的那一块,周边那些0因为都是再边界上,因此不算是土地。整体都是DFS的模板,跟上一个题比较就是多了去掉边缘的几行代码。,今天再来分享一个求岛屿数量的进阶题目,lk1254。看个图就知道了,这道题0代表土地,1代表海水。那么其实思路就很简单了,原创 2022-10-30 17:41:37 · 190 阅读 · 0 评论 -
LeetCode:200.岛屿数量
但是你会发现这只是我从grid[0][0]开始找的,下面我就要找grid[0][1]了,但其实grid[0][1]这个土地我之前就找过了其实,所以对于这种很密集的,我们一直这样递归去遍历会发现计算了好多重复的土地。有的人可能不懂什么叫做深度遍历去搜索,其实就是类比二叉树的深度遍历去递归(这里我就写的是递归代码,迭代法用栈都是同样的道理),二叉树无论前中后序都是深度遍历不是。遍历整个二维数组,找到岛屿,count++,count是记录岛的个数的。而岛屿这种网格题其实就是图的遍历,在衍生就是树的遍历呗。原创 2022-10-22 19:15:13 · 495 阅读 · 0 评论 -
LeetCode 23.合并k个升序链表
看到这个题首相想到的就是暴力转化破解,思路就是把链表的所有结点值放进一个数组里面,对这个数组排序,我们可以用vector动态创建,完事之后,对数组进行从小到大的默认排序,最后遍历整个数组根据值去创建一个一个新的结点,把这些结点串在一起返回就行。都知道优先级队列底层是拿堆实现的,默认的大顶堆,每次把元素放进优先队列里,他会自动给你排序,对头就是优先级最高的那个,这里的优先级可能是大小可能是什么的,对于自定义的类型我们可以自定义他的排序方式。输入:lists = [[1,4,5],[1,3,4],[2,6]]原创 2022-10-09 14:02:54 · 1377 阅读 · 2 评论 -
recording:24. 两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。原创 2022-09-08 23:22:48 · 404 阅读 · 0 评论 -
模拟类型 recording:59.螺旋矩阵II
给你一个正整数n,生成一个包含1到n2所有元素,且元素按顺时针顺序螺旋排列的n x n正方形矩阵matrix。这种题没有什么算法,就是模拟整个过程,注意循环模拟时的边界,这里我用左闭右开的写法,意思就是在模拟第一行的时候最后一个数不填,模拟列的时候把这个数字当做第一个数,填进去,同时此列的最后一个数也不填,放在下一次去填入原创 2022-09-05 21:22:12 · 1000 阅读 · 0 评论 -
recording:904.水果成篮
你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类。你只有 两个 篮子,并且每个篮子只能装 单一类型 的水果。给你一个整数数组 fruits ,返回你可以收集的水果的 最大 数目。一旦你走到某棵树前,但水果不符合篮子的水果类型,那么就必须停止采摘。利用滑动窗口和哈希表来做比较好理解。原创 2022-09-04 21:48:51 · 124 阅读 · 0 评论 -
recording:27. 移除元素
力扣,移除数组,给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。原创 2022-09-01 19:06:57 · 116 阅读 · 1 评论 -
recording:34. 在排序数组中查找元素的第一个和最后一个位置
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。...原创 2022-08-31 20:01:44 · 99 阅读 · 0 评论 -
回文链表(详解)
LeetCode HOT 100回文链表想完全理解这道题还请先转入反转单链表【图文详解】掌握反转链表的思想问题描述:给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。思路方法解读:当我们遇到回文问题会想到,在数组里面我们可以用两个指针一个从头一个从尾开始遍历到中间,进行比较,那对于链表的操作是复杂的,我们可不可以将链表的值复制在数组里,对数组进行操作?答案是可以的。我们可以将链表的值复制到新申请的数组当中,利用双...原创 2022-05-14 17:43:13 · 5480 阅读 · 10 评论 -
常见的链表面试问题详解(双指针思维)
面试的时候经常碰见诸如获取倒数第k个元素,获取中间位置的元素,判断链表是否存在环,判断环的长度等和长度与位置有关的问题。这些问题都可以通过灵活运用双指针来解决。问题一:剑指Offer.链表中倒数第k个节点问题描述:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。思路解读:设有原创 2022-04-26 15:58:20 · 1603 阅读 · 4 评论 -
反转单链表【图文详解】
问题描述:给你单链表的头结点head,请你反转链表,并返回反转后的链表。我在这里详细讲解两种经典解法(双指针)迭代求解:双指针法是最好理解的,无非一前一后,一起走同时改变局部指向定义两个指针,让pre在前,cur在后 每一次让pre的next指向cur,即完成一次局部的指向转变 局部完成一次后,两个指针一起向后走(这中间需要一个临时指针用来保存pre的下一个位置,与交换两个数的思想一致) 当pre走到表尾,完成了最后一个转换,循环结束循环内部示意图:代码示例:原创 2022-04-26 14:46:19 · 1221 阅读 · 0 评论