剑指 Offer
从零开始的数据猿
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 58 - II. 左旋转字符串
题目 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。 示例 1: 输入: s = "abcdefg", k = 2 输出: "cdefgab" 示例 2: 输入: s = "lrloseumgh", k = 6 输出: "umghlrlose" 限制: 1 <= k < s.length <= 10000 代码 clas原创 2021-05-16 09:20:45 · 130 阅读 · 6 评论 -
剑指 Offer 05. 替换空格
题目 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例 1: 输入:s = "We are happy." 输出:"We%20are%20happy." 限制: 0 <= s 的长度 <= 10000 解题思路 方法一:字符数组 方法二:replace函数 代码 class Solution { public String replaceSpace(String s) { int length = s.length();原创 2021-05-16 09:19:02 · 128 阅读 · 0 评论 -
剑指 Offer 29. 顺时针打印矩阵
题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: 输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出:[1,2,3,4,8,12,11,10,9,5,6,7] 限制: 0 <= matrix.length <= 100 0 <= matrix[i].lengt原创 2021-05-09 08:21:34 · 126 阅读 · 0 评论 -
剑指 Offer 35. 复杂链表的复制 做题小结
题目 请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。 示例 1: 输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]] 输出:[[7,null],[13,0],[11,4],[10,2],[1,0]] 示例 2: 输入:head = [[1,1],[2,1]] 输出:[[1,1],[2,1]] 示例 3:原创 2020-12-20 21:57:13 · 2246 阅读 · 0 评论 -
剑指 Offer 54. 二叉搜索树的第k大节点 做题小结
题目: 给定一棵二叉搜索树,请找出其中第k大的节点。 示例 1: 输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2 输出: 4 示例 2: 输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4 / 1 输出: 4 限制: 1 ≤ k ≤ 二叉搜索树元素个数 解题思路: 中序遍历(左=》根原创 2020-12-13 09:16:12 · 2256 阅读 · 0 评论 -
剑指 Offer 32 - II. 从上到下打印二叉树 II 做题笔记
题目: 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [ [3], [9,20], [15,7] ] 提示: 节点总数 <= 1000 解题思路: 代码: class Solution { public List<List<Integer>原创 2020-12-03 00:50:29 · 2272 阅读 · 0 评论 -
剑指 Offer 32 - I. 从上到下打印二叉树 做题笔记
题目: 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回: [3,9,20,15,7] 提示: 节点总数 <= 1000 解题思路: 代码: class Solution { public int[] levelOrder(TreeNode root) { if(root == nul原创 2020-12-03 00:36:21 · 2340 阅读 · 0 评论 -
剑指 Offer 68 - II. 二叉树的最近公共祖先 做题小结
题目: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4] 示例 1: 输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 输出: 3 解释: 节点 5 和节原创 2020-12-02 01:11:41 · 2249 阅读 · 0 评论 -
剑指 Offer 28. 对称的二叉树 做题小结
题目: 请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3 示例 1: 输入:root = [1,2,2,3,4,4,3] 输出:true 示例 2: 输入原创 2020-12-02 00:35:55 · 2277 阅读 · 0 评论 -
剑指 Offer 55 - II. 平衡二叉树 做题笔记
方法一: 代码: class Solution { public boolean isBalanced(TreeNode root) { return recur(root) != -1; } private int recur(TreeNode root) { if (root == null) return 0; int left = recur(root.left); if(left == -1) return原创 2020-12-01 12:11:34 · 2254 阅读 · 0 评论 -
剑指 Offer 55 - I. 二叉树的深度 做题小结
题目: 输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3 。 提示: 节点总数 <= 10000 解题思路 方法一:后序遍历(DFS) 树的后序遍历 / 深度优先搜索往往利用 递归 或 栈 实现,本文使用递归实现。 关键点: 此树的深度和其左(右)原创 2020-11-30 19:22:11 · 2595 阅读 · 0 评论 -
剑指 Offer 59 - II. 队列的最大值 做题小结
题目: 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。 若队列为空,pop_front 和 max_value 需要返回 -1 示例 1: 输入: [“MaxQueue”,“push_back”,“push_back”,“max_value”,“pop_front”,“max_value”] [[],[1],[2],[],[],[]] 输出: [null,null,null,2,1,2]原创 2020-11-20 20:50:48 · 2398 阅读 · 0 评论 -
剑指 Offer 30. 包含min函数的栈 做题小结
题目 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。 示例: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.min(); --> 返回 -3. minStack.pop(); minStack.top(); --> 返回 0.原创 2020-11-06 21:42:27 · 2218 阅读 · 0 评论 -
剑指 Offer 31 做题笔记
题目: 栈的压入、弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。 示例 1: 输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1] 输出:true 解释:我们可以按以下顺序执行: push(1), push(2), pu原创 2020-11-07 17:03:29 · 2304 阅读 · 0 评论