刷题
Katrinasayhello_
平平无奇小辣鸡的学习过程~
展开
-
刷题|剑指 Offer 68 - II. 二叉树的最近公共祖先_JavaScript
题目描述剑指 Offer 68 - II. 二叉树的最近公共祖先解题思路参考K神:剑指 Offer 68 - II. 二叉树的最近公共祖先(DFS ,清晰图解)代码实现/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * @param {TreeNode原创 2022-02-23 19:07:00 · 55 阅读 · 0 评论 -
刷题|剑指 Offer 68 - I. 二叉搜索树的最近公共祖先_JavaScript
题目描述剑指 Offer 68 - I. 二叉搜索树的最近公共祖先解题思路二叉搜索树的特点:我们可以利用这个特点去找最近公共祖先代码实现/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * @param {TreeNode} root * @para原创 2022-02-23 18:52:09 · 49 阅读 · 0 评论 -
刷题|剑指 Offer 57 - II. 和为s的连续正数序列_JavaScript
题目描述剑指 Offer 57 - II. 和为s的连续正数序列解题思路动态规划+滑动窗口代码实现/** * @param {number} target * @return {number[][]} */var findContinuousSequence = function(target) { let res = []; let i=1, j=1; let sum = 0; while (i<= Math.floor(target / 2))原创 2022-02-23 12:51:09 · 51 阅读 · 0 评论 -
刷题|剑指 Offer 57. 和为s的两个数字_JavaScript
题目描述剑指 Offer 57. 和为s的两个数字解题思路方法1:map遍历加法转减法map方法2: 双指针注意:题中说这是一个递增数组,很容易想到双指针代码实现方法1:map遍历/** * @param {number[]} nums * @param {number} target * @return {number[]} */var twoSum = function(nums, target) { let m = new Map(); for (l原创 2022-02-23 11:52:42 · 55 阅读 · 0 评论 -
刷题|剑指 Offer 55 - II. 平衡二叉树_JavaScript
题目描述剑指 Offer 55 - II. 平衡二叉树解题思路纯纯活学活用上一题的方法二了咱就是说刷题|剑指 Offer 55 - I. 二叉树的深度_JavaScript代码实现/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * @param {Tree原创 2022-02-23 11:43:07 · 51 阅读 · 0 评论 -
刷题|剑指 Offer 55 - I. 二叉树的深度_JavaScript
题目描述剑指 Offer 55 - I. 二叉树的深度解题思路方法1: 遍历找出每层节点,保存在临时数组中一层遍历完保存在结果数组中返回结果数组长度方法2:递归返回左右子树的最大值即可代码实现/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** *原创 2022-02-23 11:28:06 · 325 阅读 · 0 评论 -
刷题|剑指 Offer 54. 二叉搜索树的第k大节点_JavaScript
题目描述剑指 Offer 54. 二叉搜索树的第k大节点解题思路遍历二叉树,存储节点到数组数组节点排序返回倒数第k个代码实现/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * @param {TreeNode} root * @param {num原创 2022-02-23 11:16:39 · 56 阅读 · 0 评论 -
刷题|剑指 Offer 53 - II. 0~n-1中缺失的数字_JavaScript
题目描述剑指 Offer 53 - II. 0~n-1中缺失的数字解题思路方法1: 差集法构建完整数组用filter求差集方法2: 二分法暂略代码实现方法1:/** * @param {number[]} nums * @return {number} */var missingNumber = function(nums) { const test = Array.from(new Array(nums[nums.length - 1] + 1).keys());原创 2022-02-23 11:10:02 · 127 阅读 · 0 评论 -
刷题|剑指 Offer 53 - I. 在排序数组中查找数字 I_JavaScript
题目描述剑指 Offer 53 - I. 在排序数组中查找数字 I解题思路方法1:循环法方法2: 二分法注意:题目中说数组nums是排序数组感谢大佬提供的思路:剑指Offer——在排序数组中查找数字I(JS实现)代码实现方法1:循环法/** * @param {number[]} nums * @param {number} target * @return {number} */var search = function(nums, target) { if (!n原创 2022-02-23 10:11:26 · 223 阅读 · 0 评论 -
刷题|剑指 Offer 52. 两个链表的第一个公共节点_JavaScript
题目描述剑指 Offer 52. 两个链表的第一个公共节点解题思路遇到这样的题,显然是使用快慢指针让较长的先走length1-length2步,然后两个再一起走,就会在同一个节点相遇代码实现/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } *//** * @param {ListNode}原创 2022-02-22 11:38:46 · 83 阅读 · 0 评论 -
刷题|剑指 Offer 50. 第一个只出现一次的字符_JavaScript
题目描述剑指 Offer 50. 第一个只出现一次的字符解题思路利用map统计次数map的key是按照添加顺序的,看下图利用object.entries()遍历key和value代码实现/** * @param {string} s * @return {character} */var firstUniqChar = function(s) { if (!s) return ' ' m = new Map(); for (let i of原创 2022-02-22 11:25:27 · 45 阅读 · 0 评论 -
刷题|剑指 Offer 42. 连续子数组的最大和_JavaScript
题目描述剑指 Offer 42. 连续子数组的最大和解题思路看到这样的题,第一反应就是动态规划基本想法如下:遍历item开始求和count首先需要判断是否需要count+item?然后与之前保存的最大值比较,一直取较大的值代码实现/** * @param {number[]} nums * @return {number} */var maxSubArray = function(nums) { let maxNum = nums[0], pre = 0; n原创 2022-02-22 11:06:11 · 44 阅读 · 0 评论 -
刷题|剑指 Offer 40. 最小的k个数_JacaScript
题目描述剑指 Offer 40. 最小的k个数解题思路需要注意的是,array.sort()用于排序的时候,是按照字符的Unicode位进行排序的所以在使用sort的时候可以采用arr.sort((a, b) => a - b)具体看下图代码描述/** * @param {number[]} arr * @param {number} k * @return {number[]} */var getLeastNumbers = function(arr, k) {原创 2022-02-22 10:53:55 · 98 阅读 · 0 评论 -
刷题|剑指 Offer 39. 数组中出现次数超过一半的数字_JavaScript
题目描述剑指 Offer 39. 数组中出现次数超过一半的数字解题思路最简单的思路就是,遍历数组,统计数字出现的次数,然后返回次数超过一半的数字即可代码实现/** * @param {number[]} nums * @return {number} */var majorityElement = function(nums) { let map = new Map(), maxNum = nums[0], maxCount = 1; for (let i of num原创 2022-02-22 10:42:34 · 61 阅读 · 0 评论 -
刷题|剑指 Offer 32 - II. 从上到下打印二叉树 II_JavaScript
题目描述剑指 Offer 32 - II. 从上到下打印二叉树 II解题思路利用queue来存储二叉树每一层的节点,注意先左后右因为左节点一直在队头所以遍历时使用queue.shift()来获取节点并从queue中删除即可代码实现/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null;原创 2022-02-22 10:20:42 · 46 阅读 · 0 评论 -
刷题|剑指 Offer 30. 包含min函数的栈_JavaScript
题目描述剑指 Offer 30. 包含min函数的栈解题思路创建两个栈,分别为stack1和stack2stack1用于存储数据,经历push、pop、top,stack2用于存储最小数字(1)push:向stack1存入数字x,如果stack2为空或者stack2的顶部的数字大于x,就存入x,否则不存(2)pop:删除stack1顶部元素,此时要注意,如果stack2的顶部数字和stack1的顶部数字相同,那么stack2的顶部数字也要删除(3)top:返回stack1的顶部数字,注意是原创 2022-02-22 09:40:57 · 65 阅读 · 0 评论 -
刷题|剑指 Offer 29. 顺时针打印矩阵_JavaScript
题目描述剑指 Offer 29. 顺时针打印矩阵解题思路设置边界指针遍历代码实现原创 2022-02-22 09:40:47 · 128 阅读 · 0 评论 -
刷题|剑指 Offer 27. 二叉树的镜像_JavaScript
题目描述剑指 Offer 27. 二叉树的镜像知识点链表解题思路从根节点开始,只有是有左右子节点的父节点都要进行左右子节点的交换,非常容易就能想到递归代码实现/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * @param {TreeNode} root原创 2022-02-21 19:36:13 · 114 阅读 · 0 评论 -
刷题|剑指 Offer 25. 合并两个排序的链表_JavaScript
题目描述剑指 Offer 25. 合并两个排序的链表解题思路这两个链接原本就是递增排序的,所以第一个节点的值是最小的,另外,在两个列表长度不一致的情况下,可以直接在新链表后面补上剩下的链表即可创建let cur = null比较l1.val和l2.val的大小(1)l1.val <= l2.val:cur=l1; cur.next=mergeTwoLists(l1.next, l2)(2)l1.val > l2.val:cur=l2; cur.next=mergeTwoLi原创 2022-02-21 15:23:13 · 66 阅读 · 0 评论 -
刷题|剑指 Offer 24. 反转链表_JavaScript
题目描述剑指 Offer 24. 反转链表解题思路看这里:剑指 Offer 24. 反转链表(迭代 / 递归,清晰图解)_k神代码实现/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } *//** * @param {ListNode} head * @return {ListNode} */原创 2022-02-21 15:08:44 · 108 阅读 · 0 评论 -
刷题|剑指 Offer 22. 链表中倒数第k个节点_JavaScript
题目描述剑指 Offer 22. 链表中倒数第k个节点解题思路快慢指针fast先走k步,然后slow开始走当fast走到最后的时候,开始遍历slow就可以输出后面的链表代码实现/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } *//** * @param {ListNode} head原创 2022-02-21 14:59:52 · 123 阅读 · 0 评论 -
刷题|剑指 Offer 21. 调整数组顺序使奇数位于偶数前面_JavaScript
题目描述剑指 Offer 21. 调整数组顺序使奇数位于偶数前面解题思路解题之前先看一下另外一题,可以比较一下解题思路刷题|283. 移动零_JavaScript利用左右指针,保证left <=right进行循环如果left指向奇数,left+=1,同理,如果right指向偶数,right-=1如果left指向偶数且right指向奇数,则交换最终返回数组代码实现/** * @param {number[]} nums * @return {number[]} */va原创 2022-02-21 14:43:34 · 59 阅读 · 0 评论 -
刷题|283. 移动零_JavaScript
题目描述283. 移动零解题思路代入情景:有12本书,其中有6本是一套,其余为杂书,怎么样方便又快速地将书排好?相比于找到6本书重新放置【创建新的数组】,我们更倾向于把杂书往后面移动,一套的书往前面移动【在原数组中操作】,那么如何实现呢?【很容易想到:替换】我们设定两个指针,一个表示正确的顺序cur,一个表示当前书的索引index,如果书的一套里面的,就去占cur指向的位置,如果不是,就暂时搁置,等找到下一本再来替换;确定好6本书之后,书架后面的位置要用杂书填充代码实现/** * @原创 2022-02-21 14:32:12 · 70 阅读 · 0 评论 -
刷题|剑指 Offer 18. 删除链表的节点_JavaScript
题目描述剑指 Offer 18. 删除链表的节点解题思路我们知道,删除节点的一般做法是:让该节点的前一个节点指向该节点的后一个节点即可所以,我们可以指定前一个节点和当前节点分别为pre和cur, 因此,引入虚拟节点(head之前,即pre=head.next)代码实现/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = nul原创 2022-02-21 14:07:08 · 65 阅读 · 0 评论 -
刷题|剑指 Offer 17. 打印从1到最大的n位数_JavaScript
题目描述剑指 Offer 17. 打印从1到最大的n位数解题思路十进制数:已知n,十进制数为 const num = Math.pow(10, n)生成一个从start到end的连续数组参考来源:JS生成一个连续数值的数组function generateArray(start, end) { return Array.from(new Array(end + 1).keys()).slice(start)};代码实现/** * @param {number} n * @原创 2022-02-21 13:26:21 · 67 阅读 · 0 评论 -
刷题|剑指 Offer 15. 二进制中1的个数_JavaScript
题目描述剑指 Offer 15. 二进制中1的个数解题思路最简单的方法,计数法代码实现/** * @param {number} n - a positive integer * @return {number} */var hammingWeight = function(n) { const s = n.toString(2); // 二进制 let count = 0; for (let i=0; i< s.length; i++) {原创 2022-02-21 13:13:48 · 43 阅读 · 0 评论 -
刷题|剑指 Offer 12. 矩阵中的路径_JavaScript
题目描述剑指 Offer 12. 矩阵中的路径知识点深度优先搜索(DFS)解题思路遍历搜索第一个字母的位置;注意边界条件:矩阵board为空或者word为空字符串,直接返回false代码实现原创 2022-02-21 13:05:03 · 56 阅读 · 0 评论 -
数据结构|图论DFS&&BFS_JavaScript
首先需要明确深度优先遍历(BFS)和广度优先遍历(DFS)是怎么进行遍历的?可以参考一下这篇文章:漫画:深度优先遍历 和 广度优先遍历知道了DFS和BFS后,我们可以用通俗的语言解释如何实现DFS和BFSDFS:从根节点开始,找子节点,再找子节点的子节点,…,直到没有子节点,那就返回上一层查找子节点BFS:从根节点开始,找左右子节点,再按照先左后右的顺序【队列:先进先出】查找左右子节点的子节点代码实现BFS (广度优先搜索)在这里插入代码片...原创 2022-02-19 19:44:17 · 193 阅读 · 0 评论 -
刷题|700. 二叉搜索树中的搜索_JavaScript
题目描述700. 二叉搜索树中的搜索知识点二叉搜索树的性质:二叉搜索树满足如下性质:左子树所有节点的元素值均小于根的元素值;右子树所有节点的元素值均大于根的元素值。解题思路方法1:迭代/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (le原创 2022-02-19 19:31:14 · 44 阅读 · 0 评论 -
刷题|剑指 Offer 11. 旋转数组的最小数字_JavaScript
题目描述剑指 Offer 11. 旋转数组的最小数字知识点二分法Math.floor() 返回小于或等于一个给定数字的最大整数。解题思路根据题意这个数组是经过旋转的,所以存在前半部分大,后半部分小的情况,我们要做的就是把前后两部分的接壤点给找出来初始值:left=0, right=numbers.length-1;以left <= right为条件进行循环,每次循环取`mid=Math.floor(left + right),会有三种情况:情况1:numbers[mid]原创 2022-02-19 17:38:21 · 277 阅读 · 0 评论 -
刷题|剑指 Offer 10- II. 青蛙跳台阶问题_JavaScript
题目描述剑指 Offer 10- II. 青蛙跳台阶问题知识点 && 解题思路参考刷题|剑指 Offer 10- I. 斐波那契数列_JavaScript代码实现/** * @param {number} n * @return {number} */var numWays = function(n) { let temp = [1, 1]; for (let i = 0; i < n; i++) { temp[i+2] = (te原创 2022-02-19 15:25:44 · 119 阅读 · 0 评论 -
刷题|剑指 Offer 04. 二维数组中的查找_JavaScript
题目描述剑指 Offer 04. 二维数组中的查找注意点每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序解题思路初始值:第1行,第m列的数字;对比target:小了就向下移动,大了就向左移动代码实现/** * @param {number[][]} matrix * @param {number} target * @return {boolean} */var findNumberIn2DArray = function(matrix, target原创 2022-02-19 15:16:15 · 173 阅读 · 0 评论 -
刷题|剑指 Offer 03. 数组中重复的数字_JavaScript
题目描述剑指 Offer 03. 数组中重复的数字解题思路遍历数组利用map检测是否有重复代码实现/** * @param {number[]} nums * @return {number} */var findRepeatNumber = function(nums) { let m = new Map(); for (let i = 0; i < nums.length; i++) { if (m.has(nums[i])) {原创 2022-02-19 14:51:10 · 141 阅读 · 0 评论 -
刷题|LeetCode_Hot100 1. 两数之和_JavaScript
题目描述LeetCode_Hot100 1. 两数之和知识点map的属性 && 方法:set、get、has解题思路加法可以转化为减法利用map进行存储和搜索代码实现/** * @param {number[]} nums * @param {number} target * @return {number[]} */var twoSum = function(nums, target) { const m = new Map(); for原创 2022-02-18 19:50:07 · 85 阅读 · 0 评论 -
刷题|剑指 Offer 06. 从尾到头打印链表_JavaScript
题目描述剑指 Offer 06. 从尾到头打印链表知识点链表的遍历代码实现1. 方法一:循环法/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } *//** * @param {ListNode} head * @return {number[]} */var reversePrint =原创 2022-02-18 16:32:26 · 206 阅读 · 0 评论 -
刷题|剑指 Offer 05. 替换空格_JavaScript
题目描述剑指 Offer 05. 替换空格知识点正则表达式s.proptype.replace()解题思路正则表达式全局替换代码实现/** * @param {string} s * @return {string} */var replaceSpace = function(s) { return (s.replace(/ /g, '%20'))};...原创 2022-02-18 16:17:25 · 134 阅读 · 0 评论 -
刷题|剑指 Offer 10- I. 斐波那契数列_JavaScript
题目描述剑指 Offer 10- I. 斐波那契数列题目解析形如 F(N) = F(N-1) + F(N-2) N>1的就是斐波那契数列以N = 3为例: F(3) = F(2) + F(1) = (F(1) + F(0)) + F(2))解题思路_动态规划状态定义:设dp为一维数组,其中dp[i]的值代表斐波那契数列的第i个数字;dp[i+1] = dp[i] + dp[i-1];初始状态:dp[0] = 0, dp[1] = 1;返回值:dp[n];注意点答案需要原创 2022-02-18 15:58:04 · 125 阅读 · 0 评论 -
刷题|剑指 Offer 09. 用两个栈实现队列_JavaScript
以前一直用的是python,已经决定转前端啦~所以开启前端刷题之旅题目描述考察知识点栈和队列的特点:队列先进先出,栈先进后出JS中关于Array的内置方法:push,pop,shift,unshift解题思路两次进出栈就可以实现队列的先进先出创建两个栈A和B,A用于存储数据(push),B用于存储(push)从A的栈顶获取的数据(pop)注意:(1)AB中均没有数据返回-1;(2)B中没有数据,就读取A的栈顶数据存储到B中,如果B有数据,就读取B的栈顶数据解题过程v.原创 2022-02-18 15:21:44 · 69 阅读 · 0 评论