02 2020 档案
摘要:题目 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 返回它的最大深度 3 。 本题同 "【剑指Offer】面试题55 I. 二叉树的深度" 思路
阅读全文
摘要:题目 输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。 例如: 给定二叉树 [3,9,20,null,null,15,7], 返回它的最大深度 3 。 提示: 节点总数 left && !root right) retu
阅读全文
摘要:题目 给定一棵二叉搜索树,请找出其中第k大的节点。 示例 1: 示例 2: 限制: 1 ≤ k ≤ 二叉搜索树元素个数 思路 逆中序遍历。 代码 时间复杂度:O(n) 空间复杂度:O(1)
阅读全文
摘要:题目 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 sum = 22, 返回: 本题同 "【剑指Offer】面试题34. 二叉树中和为某一值的路径" 思路一:回溯 代码 另一种写法
阅读全文
摘要:题目 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。 示例: 给定如下二叉树,以及目标和 sum = 22, 返回: 提示: 节点总数 pathSum(TreeNode root, int sum) { vector
阅读全文
摘要:题目 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。 例如: 给定二叉树: [3,9,20,null,null,15,7], 返回其层次遍历结果: 提示: 节点总数 levelOrder(Tree
阅读全文
摘要:题目 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 例如: 给定二叉树: [3,9,20,null,null,15,7], 返回其层次遍历结果: 提示: 节点总数 levelOrder(TreeNode root) { vector res; if (root) {
阅读全文
摘要:题目 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 例如: 给定二叉树: [3,9,20,null,null,15,7], 返回: 提示: 节点总数 levelOrder(TreeNode root) { vector res; if (root) { queue que;
阅读全文
摘要:题目 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A: 给定的树 B: 返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。 示例 1: 示例 2: 限制:0 val =
阅读全文
摘要:题目 请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 示例 1: 示例 2: 限制: `0 val == copy
阅读全文
摘要:题目 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 说明 : 如果你可以运用递归和迭代两种方法解决这个问题,会很加分。 本题同 "【剑指Offer】面试题28. 对称的
阅读全文
摘要:题目 翻转一棵二叉树。 示例: 输入: 输出: 本题同 "【剑指Offer】面试题27. 二叉树的镜像" 思路一:递归 代码 时间复杂度:O(n) 空间复杂度:O(n) 思路二:迭代 类似深度优先。 代码 时间复杂度:O(n) 空间复杂度:O(n)
阅读全文
摘要:题目 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 例如输入: 镜像输出: 示例 1: 限制: `0 left && !root right)) return root; root left = mirrorTree(root left); root right = mirrorTree(r
阅读全文
摘要:题目 输入两个链表,找出它们的第一个公共节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 示例 2: 示例 3: 注意: 如果两个链表没有交点,返回 null. 在返回结果后,两个链表仍须保持原有的结构。 可假定整个链表结构中没有循环。 程序尽量满足 O(n) 时间复杂度,且仅用 O
阅读全文
摘要:题目 输入两个链表,找出它们的第一个公共节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 示例 2: 示例 3: 注意: 如果两个链表没有交点,返回 null. 在返回结果后,两个链表仍须保持原有的结构。 可假定整个链表结构中没有循环。 程序尽量满足 O(n) 时间复杂度,且仅用 O
阅读全文
摘要:题目 反转一个单链表。 示例: 进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题? 注意 :本题同 "【剑指Offer】面试题24. 反转链表" 思路一:反转链表元素 取出链表中元素放入vector中,然后将vector中元素逆向存入链表中。 1. 遍历链表,用vector存放数组元素
阅读全文
摘要:题目 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 示例: 限制: `0 res; ListNode pNode = head; while (pNode != nullptr) { res.push_back(pNode val); pNode = pNode next
阅读全文
摘要:LeetCode题解汇总(包括剑指Offer和程序员面试金典,持续更新)) 剑指Offer 数据结构 链表 序号 题目 难度 06 从尾到头打印链表 简单 18 删除链表的节点 简单 22 链表中倒数第k个节点 简单 24 反转链表 简单 25 合并两个排序的链表 简单 35 复杂链表的复制 中等
阅读全文
摘要:题目 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。 示例: 思路 1. 先统计链表节点个数 2. 计算从前向后
阅读全文
摘要:题目 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。 返回删除后的链表的头节点。 注意 :此题对比原题有改动 示例 1: 示例 2: 说明: 题目保证链表中节点的值互不相同 若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点 思路 为了简化删除头节
阅读全文
摘要:题目 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m 1,n 1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3
阅读全文
摘要:题目 给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 示例: 思路 同 "【剑指Offer】面试题12. 矩阵中的路径" 以每个位置开头检查是否存
阅读全文
摘要:题目 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗
阅读全文
摘要:题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 示例 1: 示例 2: 思路一:暴力 代码 时间复杂度:O(n) 空间复
阅读全文
摘要:题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 示例 1: 示例 2: 提示: 思路 同 "【剑指Offer】面试题10 I. 斐波那契数
阅读全文
摘要:题目 斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: 给定 N,计算 F(N)。 示例 1: 示例 2: 示例 3: 提示: 思路:动态规划 同 "【剑指Offer】面试题10 I. 斐波那契数列" 如果使用
阅读全文
摘要:题目 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 示例 1:
阅读全文
摘要:题目 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 1 ) 示例 1: 示例 2: 提示: 1 st1; stack st2; pu
阅读全文
摘要:题目 URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。) 示例1: 示例2: 提示: 思路:双指针 同 "【剑指Offer】面试题05.替换空格" 代
阅读全文
摘要:题目 给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。 示例 1: 示例 2: 说明: 0 hash(256, 0); for (int i = 0; i < s1.size(); ++i) { ++hash[s1[i]]; hash[s2[
阅读全文
摘要:题目 字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。 示例1: 示例2: 提示:字符串长度在[0, 50000]
阅读全文
摘要:题目 给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。 回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。 回文串不一定是字典当中的单词。 示例: 思路:哈希表 哈希表统计每个字符出现次数,如果是回文串的排列,则字符出现次数为奇数的个数不能大于1。 代码
阅读全文
摘要:题目 实现一个算法,确定一个字符串 s 的所有字符是否全都不同。 示例 1: 示例 2: 限制: 0 <= len(s) <= 100 如果你不使用额外的数据结构,会很加分。 思路:find函数 代码
阅读全文
摘要:题目 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 返回如下的二叉树: 思路:递归 同 "【剑指Offer】面试题07. 重建二叉树" 关键在与正确定位左右子树范围。 代码 另一种写法 修改求根节点索引。
阅读全文
摘要:题目 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如,给出 返回如下的二叉树: 限制: `0 & preorder, vector& inorder) { if (preorder.empty()) return nullptr;
阅读全文
摘要:题目 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例 1: 限制: `0 reversePrint(ListNode head) { vector res; if (!head) return res; while (head != nullptr) { res.push
阅读全文
摘要:题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例: 现有矩阵 matrix 如下: 给定 target = 5,返回 true。 给定 target = 20,返回 f
阅读全文
摘要:题目 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例 1: 限制: `0 = 0 && j != i; i) { if (s[i] == ' ') { s[j ] = '0'; s[j ] = '2'; s[j ] = '%'; } else { s[j ] = s[i]; }
阅读全文
摘要:题目 在一个 n m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下: 给定 target = 5,返回 true。 给定 target = 20
阅读全文
摘要:LeetCode题解分类汇总(包括剑指Offer和程序员面试金典) 剑指Offer(已完成) 序号 题目 难度 03 数组中重复的数字 简单 04 二维数组中的查找 简单 05 替换空格 简单 06 从尾到头打印链表 简单 07 重建二叉树 中等 09 用两个栈实现队列 简单 10- I 斐波那契数
阅读全文
摘要:题目 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n 1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 限制: `2 & nums) { vector hash(nums.s
阅读全文