剑指offer
剑指 offer 中的题目。
城南顾北
人生是旷野,只此一生,应该尽兴。
展开
-
剑指 offer 50-II.左旋转字符串
这题其实可以将字符串操作两份,然后截取。原创 2024-03-17 15:00:02 · 354 阅读 · 0 评论 -
剑指 offer 24.反转链表
【代码】剑指 offer 24.反转链表。原创 2024-03-16 22:16:43 · 441 阅读 · 0 评论 -
剑指 offer 06.从尾到头打印链表
【代码】剑指 offer 06.从尾到头打印链表。原创 2024-03-15 19:06:46 · 325 阅读 · 0 评论 -
剑指 offer 67.把字符串转换为整数
代码中的 regMatch 有两部分,第一部分是。原创 2024-03-15 19:05:52 · 379 阅读 · 0 评论 -
剑指 offer 20.表示数值的字符串
将是否出现过数字、dot、e/E记录下来,然后通过 if / else 判断。意义不大,写不出来这么复杂的正则表达式。原创 2024-03-13 13:18:06 · 428 阅读 · 0 评论 -
剑指 offer 05.替换空格
还是 api : replace ,但是记得第一个值需要使用正则,如果是字符串的话,只会修改第一个匹配的值。使用 js 的 api 来求解:split 和 join。先对数组进行扩容,然后使用双指针 -> 纯纯有病。原创 2024-03-09 11:34:22 · 359 阅读 · 0 评论 -
剑指 offer 03.数组中重复的数字
使用一个简单的 map 映射即可。原创 2024-03-09 11:33:18 · 459 阅读 · 0 评论 -
剑指 offer 37.序列化二叉树
然后反序列化,其实就是依然根据类似前序遍历这么一个顺序,将字符串的值从头开始一个个取出来再变为节点。思路其实不复杂,从根节点开始遍历,将树的结构转变为一个字符串,看这个返回值,其实是一个类似前序遍历的结果。原创 2024-03-08 12:11:37 · 276 阅读 · 0 评论 -
剑指 offer 08.二叉树的下一个节点
使用中序遍历即可解题。但是这题只给了一个参数,就是需要寻找下一个节点的节点,并没有给出根节点。但是题目中说明了每一个节点都有一个。节点,然后再中序遍历即可。原创 2024-03-06 21:45:45 · 339 阅读 · 0 评论 -
剑指 offer 78.把二叉树打印成多行
【代码】剑指 offer 78.把二叉树打印成多行。原创 2024-03-06 21:44:38 · 319 阅读 · 0 评论 -
剑指 offer 79.判断是不是平衡二叉树
具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。检查左右子节点的深度之差是不是大于1,如果大于1的话我们返回一个标志,这里用的是-1。给你一棵二叉树,判断这棵树是不是二叉平衡树。原创 2024-03-05 18:52:22 · 314 阅读 · 0 评论 -
剑指 offer 33.二叉搜索树的后序遍历序列
二叉搜索树:左节点的值永远小于右节点的值。所以我们可以推测二叉搜索树的后序遍历(左右中)是递增的。关键:理解二叉搜索树的后序遍历结构后分治。原创 2024-03-05 18:33:40 · 299 阅读 · 0 评论 -
剑指 offer 36.二叉搜索树与双向链表
【代码】剑指 offer 36.二叉搜索树与双向链表。原创 2024-03-05 18:32:31 · 338 阅读 · 0 评论 -
剑指 offer 26.树的子结构
函数,比较这个节点以及其下面的所有节点是否和第二棵树一样,比较的过程中使用了递归。首先在第一棵树中找到第二课树的根节点所在的位置,只要找到了这个节点,然后就执行。原创 2024-03-04 20:44:38 · 350 阅读 · 0 评论 -
剑指 offer 27.二叉树的镜像
其实就是翻转二叉树。注意这题最后使用前序遍历。使用中序和后序有风险,具体请看下图中的分析。利用中左右的前序遍历的顺序,还是很好理解的。如果非想要用中序->左中右的顺序来遍历呢?中序遍历就是左中右的顺序,原创 2024-03-04 20:43:53 · 403 阅读 · 0 评论 -
剑指 offer 32.从上到下打印二叉树
32.从上到下打印二叉树二叉树的层序遍历。原创 2024-03-04 20:42:14 · 408 阅读 · 0 评论 -
剑指 offer 07.重建二叉树
那么肯定可以知道的一点是如果已知一颗二叉树的三种遍历方式,那么肯定可以知道这课树的结构。但是题目中只提供了前序和中序,可以得到这棵树的结构吗,换言之,是不是根据前序和中序,就可以得到这棵树的后序?所以本题给出前序和中序,相当于也给出了后序,也就相当于直接给出了二叉树的结构,题目也是要求我们重建出二叉树的结构。根据以上分析,就可以将二叉树还原出来,就是我们上面举例的二叉树。前序遍历:1 2 4 5 3 6 -> 中左右。后序遍历:4 5 2 6 3 1 -> 左右中。二叉树的遍历可以分为前序、中序和后序。原创 2024-03-02 21:39:10 · 317 阅读 · 0 评论 -
剑指 offer 54.二叉搜索树的第k个节点
很明显,如果你熟悉二叉树的层序遍历的话,这题又可以秒了。(注意:此时我们甚至都没有用到题目中说的二叉搜索树这个条件,只是当成了普通二叉树)但是实际上这题并没有那么复杂,因为我们只是需要将每一个节点放入一个数组,然后排序即可得到结果。根据这个特点,我们其实只需要中序遍历这个二叉搜索树,就可以得到我们想要的递增的数组了。为什么使用层序遍历的方式来写,其实就是为了熟悉这个方法,虽然有点啰嗦了。所以一棵树如果是二叉搜索树,这课树是有很明显的特点的。第 3 小的节点很明显是 4, 所以需要返回 4。原创 2024-03-02 11:32:00 · 378 阅读 · 0 评论 -
剑指 offer 35.复杂链表的赋值
题目提供的链表究竟复杂在哪里,其实就是一般的链表节点只有两个属性,一个 val(本题目中叫做 label),一个 next,但是本题的链表节点有三个属性,每一个节点还有一个 random 属性,随机指向另一个链表。将原来的链表中的节点的值复制,生成新的链表,然后根据原来的节点直接的关系,将新的节点的结构连接起来,就完成了链表的复制。我们的代码需要将这整个链表复制一遍,所以思路也很清楚,复制 val,复制 next,复制 random。看完题目你可能有点疑惑,这题究竟想要我们做些什么,原创 2024-03-01 22:08:06 · 295 阅读 · 0 评论 -
剑指 offer 55.二叉树的深度
就是给你一个二叉树,求出这个数的深度,很明显,这里说的是最大深度。比如下面的这棵树的深度是4。原创 2024-03-01 22:05:44 · 288 阅读 · 0 评论 -
剑指 offer 76.删除链表中重复的结点
然后创建一个虚拟节点,从第一个节点开始遍历,如果第一个节点出现的次数大于1,就将第一个节点删除,即将 dummy 的 next 指向 dummy 的 next 的 next,后续操作类似。比如下图中的例子,我们发现第一个节点删除了之后,第二个节点还是出现次数大于1的结点,那就接着删除,将 dummy 再指向 next,就指向了3。其实就是将下图中上面的链表变为下面的链表,将重复的结点直接全都删除。先遍历一遍链表,将每一个数值出现的次数记录下来即可。原创 2024-02-29 22:22:23 · 318 阅读 · 0 评论 -
剑指 offer 23.链表中环的入口结点
需要理解的是:只要有环,快慢指针在一定时间后一定会相遇。并且这个时候如果将慢指针移动到开头,然后快慢指针同时移动,最终就会在循环节点处相遇。我们从头开始遍历这个链表,如果某一个节点在 map 中已经存在了,就意味着这个结点是环的入口。比如下图:慢指针每次移动一个,快指针每次移动两个,只要有环,最终会在某一个节点相遇,这里是2。找出链表中环的入口即可,返回入口结点即可。原创 2024-02-29 22:20:22 · 350 阅读 · 0 评论