![](https://img-blog.csdnimg.cn/direct/3fdc7fded4a9426482acb9ee0bcef1d5.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
剑指offer
剑指offer算法刷题笔记
NingDream816
合抱之木始于毫末,万丈高楼起于垒土!
展开
-
面试题 37. 序列化二叉树
你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。二叉树任一DFS/BFS序列所形成的二叉树是不唯一的,但是将其拓展包含空节点的树,其DFS/BFS序列唯一,即在序列化期间保存树结构。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。序列化:得到二叉树的前序遍历+中序遍历,用特定符分割。请实现两个函数,分别用来序列化和反序列化二叉树。二叉树的序列化本质上是。原创 2024-07-24 14:34:37 · 453 阅读 · 0 评论 -
面试题 36. 二叉搜索树与双向链表
速看!原创 2024-07-24 09:48:17 · 352 阅读 · 0 评论 -
面试题 35. 复杂链表的复制
遍历链表,将链表中的每个节点都复制一份,然后将原节点和复制节点的对应关系存储在哈希表中,同时连接好复制节点的 next 指针。输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]输入:head = [[3,null],[3,0],[3,null]]输出:[[3,null],[3,0],[3,null]]输入:head = [[1,1],[2,1]]输出:[[1,1],[2,1]]原创 2024-07-23 23:47:33 · 719 阅读 · 0 评论 -
面试题 34. 二叉树中和为某一值的路径
使用回溯算法,从根节点开始,递归遍历每个节点,每次递归时,将当前节点值加入到路径中,然后判断当前节点是否为叶子节点,如果是叶子节点并且路径和等于目标值,则将该路径加入到结果中。如果当前节点不是叶子节点,则递归遍历其左右子节点。递归遍历时,需要将当前节点从路径中移除,以确保返回父节点时路径刚好是从根节点到父节点。输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22。输出:[[5,4,11,2],[5,8,4,5]]原创 2024-07-22 23:21:47 · 371 阅读 · 0 评论 -
面试题 33. 二叉搜索树的后序遍历序列
后序遍历的最后一个元素为根节点,根据二叉搜索树的性质,根节点左边的元素都小于根节点,根节点右边的元素都大于根节点。因此,我们找到第一个大于根节点的位置 𝑖,那么 𝑖。输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。右边的元素都应该大于根节点,否则返回 false。然后递归判断左右子树。输入: [1,6,3,2,5]输入: [1,3,2,6,5]原创 2024-07-22 10:35:28 · 416 阅读 · 0 评论 -
面试题 32 - 从上到下打印二叉树
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。原创 2024-07-16 23:19:33 · 351 阅读 · 0 评论 -
面试题 31. 栈的压入、弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。原创 2024-07-16 22:21:08 · 122 阅读 · 0 评论 -
面试题 30. 包含 min 函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。原创 2024-07-16 21:34:46 · 124 阅读 · 0 评论 -
面试题 29. 顺时针打印矩阵
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。输出:[1,2,3,6,9,8,7,4,5]从外往里一圈一圈遍历并存储矩阵元素即可。原创 2024-07-16 20:27:45 · 395 阅读 · 0 评论 -
面试题 28. 对称的二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。原创 2024-07-16 18:26:53 · 207 阅读 · 0 评论 -
面试题 27. 二叉树的镜像
请完成一个函数,输入一个二叉树,该函数输出它的镜像。原创 2024-07-16 16:01:59 · 497 阅读 · 0 评论 -
面试题 26. 树的子结构
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。B是A的子结构, 即 A中有出现和B相同的结构和节点值。原创 2024-07-16 15:07:02 · 393 阅读 · 0 评论 -
面试题 25. 合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。输入:1->2->4, 1->3->4。输出:1->1->2->3->4->4。原创 2024-07-15 22:55:57 · 339 阅读 · 0 评论 -
面试题 21. 调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。注:[3,1,2,4] 也是正确的答案之一。输入:nums = [1,2,3,4]输出:[1,3,2,4]原创 2024-07-12 16:35:55 · 204 阅读 · 0 评论 -
面试题 19. 正则表达式匹配
可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。个字符开始进行匹配,返回值即是否匹配,那么本题答案就是。a"匹配,但与"aa.a"和"ab*a"均不匹配。例如,字符串"aaa"与模式"a.a"和"ab。请实现一个函数用来匹配包含。表示任意一个字符,而。原创 2024-07-11 20:12:44 · 307 阅读 · 0 评论 -
面试题 16. 数值的整数次方
不得使用库函数,同时不需要考虑大数问题。,即计算 x 的 n 次幂函数(即,使用快速幂算法实现。原创 2024-07-09 14:13:08 · 217 阅读 · 0 评论 -
面试题 14- I. 剪绳子
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为。例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。可能的最大乘积是多少?原创 2024-07-09 12:35:02 · 181 阅读 · 0 评论 -
面试题 12. 矩阵中的路径
输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCCED”单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。二维字符网格 board 和一个字符串单词 word。如果 word 存在于网格中,返回。原创 2024-07-09 09:37:18 · 336 阅读 · 0 评论 -
面试题 09. 用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 append_tail 和 delete_head ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,delete_head 操作返回 -1 )输出:[null,null,3,-1]原创 2024-07-08 15:20:50 · 204 阅读 · 0 评论 -
面试题 07. 重建二叉树
重建二叉树原创 2024-07-08 14:36:54 · 146 阅读 · 0 评论 -
面试题 05. 替换空格
替换空格原创 2024-07-08 13:35:51 · 339 阅读 · 0 评论 -
面试题 04. 二维数组中的查找
二维数组的查找原创 2024-07-08 13:32:41 · 288 阅读 · 0 评论 -
面试题 03. 找出数组中重复的数字
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。找出数组中重复的数字。原创 2024-07-04 10:34:26 · 483 阅读 · 0 评论