![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指 Offer
文章平均质量分 51
La vie est belle❤️
长长的路,慢慢地走
展开
-
LeetCode199 二叉树的右视图 & 剑指OfferII 046 二叉树的右侧视图
LeetCode199 二叉树的右视图 & 剑指OfferII 046 二叉树的右侧视图题目解题解题一:广度优先搜索解题二:深度优先搜索题目解题解题一:广度优先搜索// javascriptvar rightSideView = function(root) { if (root === null) return []; const result = []; const queue = [root]; while (queue.length > 0)原创 2021-12-26 16:10:02 · 430 阅读 · 0 评论 -
LeetCode169 多数元素 & 剑指Offer 39 数组中出现次数超过一半的数字
LeetCode169 多数元素题目解题解题一:哈希表解题二:排序解题三:分治解法四:Boyer-Moore 投票算法题目解题解题一:哈希表// javascriptvar majorityElement = function(nums) { let numMap = new Map(); let majorityCount = -Infinity; let majorityEle = null; for (let num of nums) {原创 2021-10-11 15:35:02 · 61 阅读 · 0 评论 -
LeetCode137 只出现一次的数字 II & 剑指Offer 56 - II 数组中数字出现的次数 II
LeetCode137 只出现一次的数字 II & 剑指Offer 56 - II 数组中数字出现的次数 II题目解题解题一:哈希表解题二:依次确定每一个二进制位解题三:数字电路设计解题四:数字电路设计优化题目LeetCode137 只出现一次的数字 II:剑指Offer 56 - II 数组中数字出现的次数 II 中的限制有些区别,其余条件一样:解题解题一:哈希表// javascriptvar singleNumber = function(nums) { const原创 2021-11-24 21:48:20 · 198 阅读 · 0 评论 -
LeetCode260 只出现一次的数字 III & 剑指Offer 56 - I 数组中数字出现的次数
LeetCode260 只出现一次的数字 III & 剑指Offer 56 - I 数组中数字出现的次数题目解题:分组位运算题目解题:分组位运算相似题目:题目解题136. 只出现一次的数字LeetCode136 只出现一次的数字137. 只出现一次的数字 IITBD260. 只出现一次的数字 III、剑指 Offer 56 - I. 数组中数字出现的次数TBD也可以用位运算 x & (-x) 获取最低位的 1,即 let h = (原创 2021-11-24 15:51:40 · 122 阅读 · 0 评论 -
LeetCode387 字符串中的第一个唯一字符 & 剑指Offer 50 第一个只出现一次的字符
LeetCode剑指Offer 50 第一个只出现一次的字符题目解题解题一:使用哈希表存储频数解题二:使用哈希表存储索引解题三:队列题目解题解题一:使用哈希表存储频数// javascriptvar firstUniqChar = function(s) { const frequency = _.countBy(s); for (const ch of Object.keys(frequency)) { if (frequency[ch] === 1) {原创 2021-11-24 14:27:21 · 230 阅读 · 0 评论 -
LeetCode8 字符串转换整数 (atoi) & 剑指Offer 67 把字符串转换成整数
class Solution: def myAtoi(self, str: str) -> int: str = str.split(" ") for i in range(len(str)): if str[i] != "": break; if str[i] == "" or ...原创 2019-11-10 21:01:25 · 114 阅读 · 0 评论 -
LeetCode 剑指Offer 47 礼物的最大价值
LeetCode 剑指Offer 47 礼物的最大价值题目解题解题一:记忆化搜索解题二:动态规划解题三:将原矩阵用作 dp 矩阵题目解题解题一:记忆化搜索// javascriptvar maxValue = function(grid) { const m = grid.length, n = grid[0].length; const record = new Map(); const dfs = (grid, i, j) => { if (i原创 2021-11-24 11:04:55 · 396 阅读 · 0 评论 -
LeetCode151 翻转字符串里的单词 & 剑指Offer 58 - I 翻转单词顺序
LeetCode151 翻转字符串里的单词 & 剑指Offer 58 - I 翻转单词顺序题目解题解题一:使用语言特性解题二:队列解题三:原地翻转题目解题解题一:使用语言特性// javascriptvar reverseWords = function(s) { return s.trim().split(/\s+/).reverse().join(' ');};解题二:队列// javascriptvar reverseWords = function(s)原创 2021-11-24 00:03:05 · 462 阅读 · 0 评论 -
LeetCode 剑指Offer 58 - II 左旋转字符串
LeetCode 剑指Offer 58 - II 左旋转字符串题目解题解题一:字符串切片解题二:字符数组解题三:字符串遍历拼接题目注意 k 的取值范围限制。解题三种解法的效率分析参考:面试题58 - II. 左旋转字符串(切片 / 列表 / 字符串,清晰图解)解题一:字符串切片// javascriptvar reverseLeftWords = function(s, n) { const len = s.length; return s.slice(n) + s.sli原创 2021-11-23 17:51:35 · 200 阅读 · 0 评论 -
LeetCode 剑指Offer 53 - II 0~n-1中缺失的数字
LeetCode 剑指Offer 53 - II 0~n-1中缺失的数字题目解题解题一:遍历 + 异或解题二:二分查找解题三:数学-等差数列求和题目解题解题一:遍历 + 异或思路:数组长度为 n,寻找第一个 nums[i] > i 的位置,返回 i,若是所有位置都满足 nums[i] == i,返回 n。// javascriptvar missingNumber = function(nums) { const n = nums.length; for (let i =原创 2021-11-23 17:05:45 · 243 阅读 · 0 评论 -
LeetCode 剑指Offer 54 二叉搜索树的第k大节点
LeetCode 剑指Offer 54 二叉搜索树的第k大节点题目解题:逆中序遍历解题一:递归解题二:栈+迭代题目解题:逆中序遍历解题一:递归思路参考:面试题54. 二叉搜索树的第 k 大节点(中序遍历 + 提前返回,清晰图解)// javascriptvar kthLargest = function(root, k) { const findKthLargest = (root) => { if (root === null) return null;原创 2021-11-23 16:07:45 · 195 阅读 · 0 评论 -
LeetCode 剑指Offer 61 扑克牌中的顺子
LeetCode 剑指Offer 61 扑克牌中的顺子题目解题解题一:集合 Set + 遍历解题二:排序 + 遍历解题三:排序+大小王填补题目解题解题一:集合 Set + 遍历参考:面试题61. 扑克牌中的顺子(集合 Set / 排序,清晰图解)// javascriptvar isStraight = function(nums) { const repeat = new Set(); let maxVal = 0, minVal = 14; for (const原创 2021-11-23 15:24:41 · 387 阅读 · 0 评论 -
LeetCode 剑指Offer 62 圆圈中最后剩下的数字
LeetCode 剑指Offer 62 圆圈中最后剩下的数字题目解题解题一:数学+递归解题二:数学+迭代题目解题解题一:数学+递归// javascriptvar lastRemaining = function(n, m) { if (n === 1) return 0; const x = lastRemaining(n - 1, m); return (m + x) % n;};解题二:数学+迭代参考:剑指 Offer 62. 圆圈中最后剩下的数字(数原创 2021-11-23 12:16:37 · 87 阅读 · 0 评论 -
LeetCode 剑指Offer 64 求1+2+…+n
LeetCode 剑指Offer 64 求1+2+…+n题目解题解题一:递归+逻辑运算符短路解题二:递归+逻辑运算符短路题目解题解题一:递归+逻辑运算符短路// javascriptvar sumNums = function(n) { n && n += sumNums(n - 1); return n;};解题二:递归+逻辑运算符短路...原创 2021-11-23 11:10:16 · 86 阅读 · 0 评论 -
LeetCode 剑指Offer 65 不用加减乘除做加法
LeetCode 剑指Offer 65 不用加减乘除做加法题目解题:位运算题目解题:位运算参考:面试题65. 不用加减乘除做加法(位运算,清晰图解)// javascriptvar add = function(a, b) { while (b !== 0) { const carry = (a & b) << 1; a ^= b; b = carry; } return a;};...原创 2021-11-22 20:47:45 · 247 阅读 · 0 评论 -
LeetCode238 除自身以外数组的乘积 & 剑指Offer 66 构建乘积数组
LeetCode238 除自身以外数组的乘积题目解题解题一:空间复杂度为O(n)解题二:空间复杂度为O(1)题目解题解题一:空间复杂度为O(n)// javascriptvar productExceptSelf = function(nums) { const n = nums.length; // 左右两侧的乘积列表 const multiL = new Array(n), multiR = new Array(n); const ans = new Ar原创 2021-10-16 21:16:45 · 88 阅读 · 0 评论 -
LeetCode236 & 剑指Offer 68 - II 二叉树的最近公共祖先 &《程序员面试金典》面试题 04.08. 首个共同祖先
LeetCode 面试题 04.08. 首个共同祖先题目解题解题一解题二题目解题所有节点的值都是唯一的。p、q 为不同节点且均存在于给定的二叉树中。以上两个限制可以简化求解:减少特殊情况的判断处理。解题一解题二...原创 2021-08-10 22:15:59 · 183 阅读 · 1 评论 -
LeetCode235 & 剑指Offer 68 - I 二叉搜索树的最近公共祖先
LeetCode235 二叉搜索树的最近公共祖先题目解题解题一:一次遍历解题二:两次遍历题目解题解题一:一次遍历// javascriptvar lowestCommonAncestor = function(root, p, q) { if (root === null) return null; // if (p === root || q === root) return root; // 可以省略,else 能够 handle if (p.val >原创 2021-10-30 22:50:11 · 99 阅读 · 0 评论 -
LeetCode《程序员面试金典》面试题 04.04. 检查平衡性 & 剑指Offer 55 - II & 110 平衡二叉树
LeetCode 面试题 04.04. 检查平衡性题目解题方法一:自顶向下的递归方法二:自底向上的递归题目解题这道题中的平衡二叉树的定义是:二叉树的每个节点的左右子树的高度差的绝对值不超过 1,则二叉树是平衡二叉树。根据定义,一棵二叉树是平衡二叉树,当且仅当其所有子树也都是平衡二叉树,因此可以使用递归的方式判断二叉树是不是平衡二叉树,递归的顺序可以是自顶向下或者自底向上。方法一:自顶向下的递归有了计算节点高度的函数,即可判断二叉树是否平衡。具体做法类似于二叉树的前序遍历,即对于当前遍历到的节点翻译 2021-08-09 00:34:49 · 112 阅读 · 0 评论 -
二分查找模板分析 & LeetCode34 在排序数组中查找元素的第一个和最后一个位置 & 剑指Offer 53 - I 在排序数组中查找数字 I
LeetCode34 在排序数组中查找元素的第一个和最后一个位置题目解题解题一:二分查找版本一解题二:二分查找版本二解题三:二分查找版本三题目解题二分查找也称折半查找(Binary Search),是一种在有序数组中查找某一特定元素的搜索算法。我们可以从定义可知,运用二分搜索的前提是数组必须是有序的,这里需要注意的是,我们的输入不一定是数组,也可以是数组中某一区间的起始位置和终止位置解题一:二分查找版本一代码来自 两次二分查找(Java)官方解答 在排序数组中查找元素的第一个和最后一个位置 的原创 2021-10-15 16:03:39 · 209 阅读 · 0 评论 -
LeetCode104 二叉树的最大深度 & 剑指Offer 55 - I 二叉树的深度
LeetCode104 二叉树的最大深度题目解题解题一:深度优先搜索解题二:广度优先搜索题目解题解题一:深度优先搜索// javascriptvar maxDepth = function(root) { if (root === null) return 0; return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;};解题二:广度优先搜索// javascriptvar maxDepth = f原创 2021-10-09 13:13:10 · 56 阅读 · 0 评论 -
LeetCode167 两数之和 II - 输入有序数组 & 剑指Offer 57 和为s的两个数字
LeetCode167 两数之和 II - 输入有序数组题目解题解题一:双指针解题二:二分查找题目解题解题一:双指针// javascriptvar twoSum = function(numbers, target) { const n = numbers.length; let left = 0, right = n - 1; while (left < right) { const sum = numbers[left] + numbers[原创 2021-11-17 23:06:12 · 71 阅读 · 0 评论 -
LeetCode 剑指Offer 32 - I 从上到下打印二叉树
LeetCode 剑指Offer 32 - I 从上到下打印二叉树题目解题:广度优先搜索题目解题:广度优先搜索本题因为所有的节点都存在一个一维数组里面,所以用广度优先搜索的顺序是合适的,深度优先搜索如果非要用,可以先用二维数组,数组里存的是每个 level 的节点从左到右的排列,最后再展开成一维数组。// javascriptvar levelOrder = function(root) { const res = [], queue = []; if (root !== nul原创 2021-11-21 19:56:33 · 347 阅读 · 0 评论 -
LeetCode102 二叉树的层序遍历 & 剑指Offer 32 - II 从上到下打印二叉树 II
LeetCode102 二叉树的层序遍历题目解题解题一:深度优先搜索 DFS解题二:广度优先搜索 BFS题目解题参考:LeetCode《程序员面试金典》面试题 04.03. 特定深度节点链表,区别是这题是用 array of array 存储,而前者是用 array of linkedlist 存储。解题一:深度优先搜索 DFS// javascriptvar levelOrder = function(root) { const res = new Array(); find原创 2021-10-04 18:17:33 · 104 阅读 · 0 评论 -
LeetCode946 验证栈序列 & 剑指Offer 31 栈的压入、弹出序列
LeetCode946 验证栈序列 & 剑指Offer 31 栈的压入、弹出序列题目解题:贪心题目解题:贪心代码参考:面试题31. 栈的压入、弹出序列(模拟,清晰图解)// javascriptvar validateStackSequences = function(pushed, popped) { const n = pushed.length; const stk = []; let i = 0; for (const num of pushed原创 2021-11-21 18:55:08 · 634 阅读 · 0 评论 -
LeetCode 剑指Offer 26 树的子结构
LeetCode 剑指Offer 26 树的子结构题目解题:深度优先搜索题目解题:深度优先搜索相似题目:题目解题面试题 04.10. 检查子树面试题 04.10. 检查子树解题剑指 Offer 26. 树的子结构剑指 Offer 26. 树的子结构解题本题与 面试题 04.10 的区别在于:面试题 04.10 约定空树是任意一个树的子树,而本题不是;面试题 04.10 规定 B 必须和 A 的某棵子树 完全相同 时返回 true;而本题是包含关系,A 中某原创 2021-11-21 17:25:55 · 204 阅读 · 0 评论 -
LeetCode54 螺旋矩阵 & 剑指Offer 29 顺时针打印矩阵
LeetCode54 螺旋矩阵题目解题解题一:模拟解题二:按层模拟题目解题解题一:模拟// javascriptvar spiralOrder = function(matrix) { if (!matrix.length || !matrix[0].length) return []; const rows = matrix.length, columns = matrix[0].length; const visited = new Array(rows).fil原创 2021-10-31 20:36:59 · 133 阅读 · 0 评论 -
LeetCode226 翻转二叉树 & 剑指Offer 27 二叉树的镜像
LeetCode226 翻转二叉树题目解题解题一:深度优先搜索解题二:广度优先搜索题目解题解题一:深度优先搜索// javascriptvar invertTree = function(root) { // 递归函数的终止条件,节点为空时返回 if (root === null) { return null; } const left = invertTree(root.left); const right = invertTree(root原创 2021-10-12 21:51:30 · 87 阅读 · 0 评论 -
LeetCode101 & 剑指Offer 28 对称的二叉树
LeetCode101 对称二叉树题目解题解题一:深度优先搜索解题二:广度优先搜索题目解题解题一:深度优先搜索// javascriptvar isSymmetric = function(root) { if (root === null) return true; return checkSymmetric(root.left, root.right);};var checkSymmetric = function(p, q) { if (p === null原创 2021-10-13 14:11:56 · 74 阅读 · 0 评论 -
LeetCode283 移动零 & 剑指Offer 21 调整数组顺序使奇数位于偶数前面
LeetCode283 移动零题目解题题目解题如果没有出现 0,left 和 right 会指向同一个元素,如果出现 0,left 会停在 0 处,若 nums[right] 不是 0,则会交换,如果 right 找不到非 0 的元素,说明所有的 0 都已经移至数组末尾。// javascriptvar moveZeroes = function(nums) { let numsLen = nums.length, left = 0, right = 0; while (rig原创 2021-10-10 21:22:18 · 122 阅读 · 0 评论 -
LeetCode 剑指 Offer 14- II 剪绳子 II
LeetCode 剑指 Offer 14- II 剪绳子 II题目解题解题一:数学/贪心算法 + 循环求余解题二:数学/贪心算法 + 快速幂求余题目解题题目解题剑指 Offer 14- I. 剪绳子 、343. 整数拆分LeetCode343 整数拆分 & 剑指Offer 14- I 剪绳子剑指 Offer 14- II. 剪绳子 IIright-aligned 文本居右这道题 n 的最大取值不再是 58 而是 1000,结果也要去模,因而不能再用动态规划原创 2021-11-20 19:45:18 · 487 阅读 · 0 评论 -
LeetCode343 整数拆分 & 剑指Offer 14- I 剪绳子
LeetCode343 整数拆分 & 剑指Offer 14- I 剪绳子题目解题解题一:动态规划解题二:数学题目343 整数拆分 & 剑指Offer 14- I 剪绳子:解题解题一:动态规划因为至少要剪成两段,所以先选取第一段的长度 j,再去看剩下的 i - j 不拆分和拆分的情况。// javascriptvar cuttingRope = function(n) { const dp = new Array(n + 1).fill(0); for (le原创 2021-11-20 16:52:59 · 212 阅读 · 0 评论 -
LeetCode155 最小栈 &《程序员面试金典》面试题 03.02. 栈的最小值 & 剑指Offer 30 包含min函数的栈
LeetCode 面试题 03.02. 栈的最小值题目解题解题一解题二题目重点:题目要求执行 push、pop 和 min 操作的时间复杂度必须为O(1)O(1)O(1)。解题解题一用指针来指示栈顶位置,不执行 push 和 pop 操作:/** * initialize your data structure here. */var MinStack = function() { this.minStack = []; this.minValue = [];原创 2021-08-04 13:12:06 · 165 阅读 · 1 评论 -
LeetCode 剑指Offer 17 打印从1到最大的n位数
LeetCode 剑指Offer 17 打印从1到最大的n位数题目解题解题一:不考虑大数越界解题二:考虑大数越界题目解题解题参考:面试题17. 打印从 1 到最大的 n 位数(分治算法 / 全排列,清晰图解)但是面试中一定要考虑大数越界的情况,不然面试官出这道题就显得很奇怪~解题一:不考虑大数越界战术性假装不知道要考虑大数问题来个解法先缓缓。// javascriptvar printNumbers = function(n) { const right_limit = Math原创 2021-11-18 18:23:58 · 363 阅读 · 0 评论 -
LeetCode50 Pow(x, n) & 剑指Offer 16 数值的整数次方
@[toc](LeetCode50 Pow(x, n) & 剑指Offer 16 数值的整数次方)题目解题几个注意点:n 可正、可负、可为 0。一个数的 0 次方等于 1,严格来讲,0 的 0 次方是没有意义的,如果要追求统一,可以设置为1;n 为负整数时,结果是 1x−n{1 \over x^{-n}}x−n1x 可正、可负、可为 0。x 为 0 时,0 的 0 次方是 1,0 的正整数次方是 0,0 的负整数次方结果是 Inf,可以使用 10−n1 \over 0^{-n}0−n原创 2021-11-18 16:26:11 · 212 阅读 · 0 评论 -
LeetCode 剑指Offer 13 机器人的运动范围
剑指Offer 13 机器人的运动范围题目解题解题一:深度优先搜索解题二:广度优先搜索解题三:动态规划题目解题深度优先和广度优先解题思路参考:剑指 Offer 13. 机器人的运动范围( 回溯算法,DFS / BFS ,清晰图解)解题一:深度优先搜索// javascriptvar movingCount = function(m, n, k) { const movingSteps = (i, j) => { visited[i][j] = true;原创 2021-11-17 21:01:16 · 295 阅读 · 0 评论 -
LeetCode10 & 剑指Offer 19 正则表达式匹配
LeetCode10 Python Regular Expression Matching 解法总结 题目解题错误解法:正确解法1:Recursion method写法1写法2: 回溯法正确解法2:Dynamic ProgrammingTop-Down VariationBottom-Up Variation写法1写法2写法3复杂度分析题目Regular Expression MatchingGiven an input string (s) and a pattern (p), implement原创 2020-05-18 00:26:00 · 184 阅读 · 0 评论 -
LeetCode79 单词搜索 & 剑指Offer 12 矩阵中的路径
LeetCode79 单词搜索题目解题:回溯题目解题:回溯// javascriptvar exist = function(board, word) { const r = board.length, c = board[0].length; const visited = new Array(r).fill(false).map(() => new Array(c).fill(false)); const directions = [[0, -1], [0,原创 2021-10-13 20:15:16 · 60 阅读 · 0 评论 -
LeetCode154 寻找旋转排序数组中的最小值 II & 剑指Offer 11 旋转数组的最小数字
LeetCode154 寻找旋转排序数组中的最小值 II & 剑指Offer 11 旋转数组的最小数字题目解题解题一:暴力遍历解题二:二分查找题目难点在于可能拥有重复元素。解题解题一:暴力遍历解题二:二分查找...原创 2021-11-14 07:48:25 · 321 阅读 · 0 评论 -
LeetCode 剑指Offer 10- II 青蛙跳台阶问题
LeetCode70 爬楼梯 & 剑指Offer 10- II 青蛙跳台阶问题题目解题解题一:动态规划解题二:矩阵快速幂题目解题注意当 n = 0 时,返回值为 1。以下题目解题方法相同,区别点是根据题干,动态转移方程会有差异。题目解题面试题 08.01. 三步问题三步问题题解剑指 Offer 10- I. 斐波那契数列斐波那契数列题解70. 爬楼梯、 剑指Offer 10- II 青蛙跳台阶问题题解解题一:动态规划// javascript原创 2021-11-13 19:30:06 · 236 阅读 · 0 评论