自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(235)
  • 收藏
  • 关注

原创 LeetCode1448 统计二叉树中好节点的数目

LeetCode1448 统计二叉树中好节点的数目题目解题:深度优先搜索题目解题:深度优先搜索// javascriptvar goodNodes = function(root) { // 统计好节点的个数 let goodNodeCnt = 0; const dfs = (root, maxValAbove) => { if (root === null) return; // maxValAbove 用于记录从顶层递归到本层的最

2022-03-16 23:17:50 521

原创 LeetCode93 复原 IP 地址

LeetCode93 复原 IP 地址题目解题:回溯题目解题:回溯// javascriptvar restoreIpAddresses = function(s) { const SEG_COUNT = 4; const segments = new Array(SEG_COUNT); const ans = []; const dfs = (s, segId, segStart) => { // 如果找到了 4 段 IP 地址并且遍历

2022-01-01 22:53:46 240

原创 LeetCode143 重排链表

LeetCode143 重排链表题目解题解题一:线性表解题二:寻找链表中点 + 链表逆序 + 合并链表题目解题解题一:线性表// javascriptvar reorderList = function(head) { if (head === null) return; const vec = new Array(); let curr = head; while (curr !== null) { vec.push(curr);

2022-01-01 18:37:27 448

原创 LeetCode92 反转链表 II

LeetCode92 反转链表 II题目解题解题一:穿针引线解题二:一次遍历「穿针引线」反转链表(头插法)题目解题解题一:穿针引线// javascriptvar reverseBetween = function(head, left, right) { // 因为头节点有可能发生变化,使用虚拟头节点可以避免复杂的分类讨论 const dummyHead = new ListNode(0, head); let prev = dummyHead; // 第

2022-01-01 16:44:54 388

原创 LeetCode25 K 个一组翻转链表

LeetCode25 K 个一组翻转链表题目解题题目解题// javascriptvar reverseKGroup = function(head, k) { const newHead = new ListNode(0); // 伪头节点 let tail = newHead; // 记录已完成翻转部分的尾节点 while (hasMoreThanKNode(head, k)) { //

2021-12-27 17:18:39 248

原创 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 519

原创 LeetCode455 分发饼干

LeetCode 455 分发饼干题目解题:排序+贪心题目解题:排序+贪心// javascriptvar findContentChildren = function(g, s) { const numOfChildren = g.length; const numOfCookies = s.length; g.sort((a, b) => a - b); s.sort((a, b) => a - b); let i = 0, j = 0;

2021-12-26 15:28:56 771

原创 LeetCode42 接雨水

LeetCode42 接雨水题目解题解题一:暴力解法解题二:动态规划解题三:单调栈解题四:双指针题目解题解题一:暴力解法// javascriptvar trap = function(height) { const n = height.length; let ans = 0; for (let i = 1; i < n - 1; ++i) { // 第一和最后一根柱子不可能接到雨水 let left_max = 0, right_m

2021-11-30 12:14:45 452

原创 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 299

原创 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 171

原创 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 256

原创 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 400

原创 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 466

原创 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 294

原创 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 262

原创 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 199

原创 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 473

原创 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 145

原创 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 183

原创 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 263

原创 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 403

原创 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 639

原创 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 251

原创 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 594

原创 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 287

原创 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 438

原创 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−n1​x 可正、可负、可为 0。x 为 0 时,0 的 0 次方是 1,0 的正整数次方是 0,0 的负整数次方结果是 Inf,可以使用 10−n1 \over 0^{-n}0−n

2021-11-18 16:26:11 302

原创 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 74

原创 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 399

原创 LeetCode33 搜索旋转排序数组

LeetCode33 搜索旋转排序数组题目解题:二分查找题目解题:二分查找一般在 不含重复元素的有序数组中查找元素 时,习惯用 left = mid + 1, right = mid - 1,循环条件为 left <= right 的二分查找模板,因为可以先拿 target 和 mid 比较,如果 mid 不符合条件,则将 mid 排除在区间外。mid 是 下取整,只有最后一次循环 left == right 时,nums[mid] 才会等于 nums[right],那次循环判断最后一个元

2021-11-14 15:40:42 479

原创 LeetCode154 寻找旋转排序数组中的最小值 II & 剑指Offer 11 旋转数组的最小数字

LeetCode154 寻找旋转排序数组中的最小值 II & 剑指Offer 11 旋转数组的最小数字题目解题解题一:暴力遍历解题二:二分查找题目难点在于可能拥有重复元素。解题解题一:暴力遍历解题二:二分查找...

2021-11-14 07:48:25 361

原创 LeetCode153 寻找旋转排序数组中的最小值

LeetCode153 寻找旋转排序数组中的最小值题目解题:二分查找题目解题:二分查找相似题目:题目解题153. 寻找旋转排序数组中的最小值解题154. 寻找旋转排序数组中的最小值 II 、剑指 Offer 11. 旋转数组的最小数字解题33. 搜索旋转排序数组解题// javascriptvar findMin = function(nums) { const n = nums.length; let left = 0, ri

2021-11-13 22:55:09 520

原创 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 278

原创 LeetCode 剑指Offer 10- I 斐波那契数列

LeetCode 剑指Offer 10- I 斐波那契数列题目解题解题一:动态规划解题二:矩阵快速幂题目与 LeetCode《程序员面试金典》面试题 08.01. 三步问题 类似。解题解题一:动态规划// javascriptvar fib = function(n) { const MOD = 1e9 + 7; if (n < 2) return n; let p = 0, q = 1, r; for (let i = 2; i <= n; ++

2021-11-12 14:19:10 702

原创 LeetCode 剑指Offer 05 替换空格

LeetCode 剑指Offer 05 替换空格题目解题:字符数组题目解题:字符数组和 LeetCode《程序员面试金典》面试题 01.03. URL化 基本一样,题目给的条件略有不同。下面的写法直接创建了长度为 s 的3倍的字符数组,省去了多遍历一遍 s 确定空格数量的操作。// javascriptvar replaceSpace = function(s) { const n = s.length; const res = new Array(3 * n); le

2021-11-12 10:32:34 261

原创 LeetCode 剑指Offer 09 用两个栈实现队列

LeetCode 剑指Offer 09 用两个栈实现队列题目解题题目解题本题与 LeetCode《程序员面试金典》面试题 03.04. 化栈为队 几乎一样,面试题 03.04 还多实现了 peek 和 empty 方法,详细思路不赘述了,指路上面的链接。力扣官网解答的动图演示:用两个栈实现队列// javascriptvar CQueue = function() { this.inStack = []; this.outStack = [];};/** * @par

2021-11-05 16:08:13 136

原创 LeetCode 剑指Offer 03 数组中重复的数字

LeetCode 剑指Offer 03 数组中重复的数字题目解题解题一:哈希集合解题二:排序题目数字在 [0, n - 1] 范围内,用 -1 代表没有找到重复元素。解题解题一:哈希集合// javascriptvar findRepeatNumber = function(nums) { let repeat = -1; const set = new Set(); for (const num of nums) { if (set.has(num)

2021-11-05 15:46:54 85

原创 LeetCode454 四数相加 II

LeetCode454 四数相加 II题目解题:分组+哈希表题目解题:分组+哈希表// javascriptvar fourSumCount = function(nums1, nums2, nums3, nums4) { let cnt = 0; const map = new Map(); for (const a of nums1) { for (const b of nums2) { map.set(a + b, (map.

2021-11-05 14:49:43 112

原创 LeetCode170 两数之和 III - 数据结构设计

LeetCode170 两数之和 III - 数据结构设计题目解题解题一:哈希表解题二:排序 + 双指针题目解题解题一:哈希表// javascriptvar TwoSum = function() { this.map = new Map();};/** * @param {number} number * @return {void} */TwoSum.prototype.add = function(number) { this.map.set(numbe

2021-11-05 14:26:43 227

原创 LeetCode771 宝石与石头

LeetCode771 宝石与石头题目解题题目解题// javascriptvar numJewelsInStones = function(jewels, stones) { const jewelSet = new Set(Array.from(jewels)); let cnt = 0; for (const stone of stones) { if (jewelSet.has(stone) === true) { cnt+

2021-11-05 14:00:20 156

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除