LeetCode
文章平均质量分 52
「已注销」
这个作者很懒,什么都没留下…
展开
-
34 在排序数组中查找元素的第一个和最后一个位置(2021.08.05)
34. 在排序数组中查找元素的第一个和最后一个位置链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/题目描述见链接内容。解法1:暴力法逐个匹配数组元素,用一个标识符来标识第一个匹配的位置和最后一个匹配的位置:var searchRange = function (nums, target) { let result = [-1, -1], flag原创 2021-08-05 09:49:46 · 213 阅读 · 0 评论 -
33 搜索旋转排序数组(2021.08.03)
33. 搜索旋转排序数组链接:https://leetcode-cn.com/problems/search-in-rotated-sorted-array/题目描述见链接内容。解法1:二分查找有序数组可以使用二分查找的方法查找元素。这道题目本身不是有序的,但是当把数组从中间分成左右两个部分之后,一定有一个部分的数组是有序的例如[4, 5, 6, 7, 0, 1, 2],从6分开后数组就变成了[4, 5, 6]和[7, 0, 1, 2],前半分数组是有序的,所以这其实我们在常规二分查找的时候查原创 2021-08-03 09:31:48 · 177 阅读 · 0 评论 -
31 下一个排列(2021.07.29)
31. 下一个排列链接:https://leetcode-cn.com/problems/next-permutation/题目描述见链接内容。解法1:两边扫描嗯,Fail列表又+1首先要搞清楚什么是字典序在数学中,字典或词典顺序(也称为词汇顺序,字典顺序,字母顺序或词典顺序)是基于字母顺序排列的单词按字母顺序排列的方法。 这种泛化主要在于定义有序完全有序集合(通常称为字母表)的元素的序列(通常称为计算机科学中的单词)的总顺序。比如[1, 2, 3],按照字典序的所有排列依次为:[1原创 2021-07-29 09:55:42 · 125 阅读 · 0 评论 -
29 两数相除(2021.07.27)
29. 两数相除链接:https://leetcode-cn.com/problems/divide-two-integers/题目描述见链接内容。解法1:暴力法用暴力法解决,直接用被除数减去除数,每减一次,结果加1,要注意的是,这个题目里面,因为限定了除数和被除数的取值范围,所以结果越界的情况只需要在除数等于1或者-1时考虑就行如果在每次计算时都判断越界的话,暴力法会超时var divide = function (dividend, divisor) { const MIN = -M原创 2021-07-27 10:42:42 · 150 阅读 · 0 评论 -
208 实现Trie前缀树(2021.07.26)
208. 实现 Trie (前缀树)链接:https://leetcode-cn.com/problems/implement-trie-prefix-tree/题目描述见链接内容。前言那天在前端群里,看到了大神聊天时提高了Trie,他的原话是:我突然好恐慌,我不知道trie,天天就那个数组写filter和includes找东西赶紧下来查了一查Tri树,Trie树也叫字典树或者前缀树,是一种用于快速查询某个字符串、字符前缀是否存在的数据结构,其核心是使用『边』来代表有无字符,使用『点』来记原创 2021-07-26 11:36:35 · 135 阅读 · 0 评论 -
322 零钱兑换(2021-07-22)
322. 零钱兑换链接:https://leetcode-cn.com/problems/coin-change/感想看了半天题解,才理解。估计过一个月再来做,还是做不出来,我一定是个废物。解法1:动态规划(1)第一步:定义数组元素的含义用一个一维数组来表示当前构成i的面额,最小需要多少枚硬币(2)第二步:找出数组元素之间的关系式dp[i] = min(dp[i], dp[i - conis[j]] + 1)这个动态规划方程不太好想,当前dp[i],枚举的最后一枚硬币的面值是coin原创 2021-07-22 10:52:55 · 184 阅读 · 1 评论 -
24 两两交换链表中的节点(2021.07.21)
24. 两两交换链表中的节点链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs/题目描述见链接内容。解法1:迭代一开始想用双指针解决,结果把两个指针一顿交换,发现交换了个寂寞,后来发现只利用一个指针cur,对cur.next和cur.next.next不断赋值就可以还利用之前的小技巧,声明了一个DummyNode,放在head前面,这样就不需要判断首节点的特殊性了var swapPairs = function (head) {原创 2021-07-21 11:58:16 · 265 阅读 · 0 评论 -
22 括号生成(2021-07-20)
22. 括号生成链接:https://leetcode-cn.com/problems/generate-parentheses/题目描述见链接内容。思考昨天做这道题,没思路,看了题解学习了写代码一直没休息,写到眼睛疼想吐图啥解法1:成对匹配把一对括号()看做一个从整体,当n === 1是,结果是[()],n === 2时,对[()]进行遍历,()有三个位置可以插入,插入的结果是()()、(())、()(),显然是有重复的结果,可以利用Set来去重:var generateParent原创 2021-07-20 09:49:08 · 342 阅读 · 0 评论 -
19 删除链表的倒数第 N 个结点(2021-07-15)
19. 删除链表的倒数第 N 个结点链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/题目描述见链接内容。解法1:两次遍历计算链表长度可以通过两次遍历来实现,第一次遍历计算出链表长度,这样就知道倒数第n个对应的正数是第几个了,然后在第二次遍历时,将对应的节点的『前驱节点』的next指向next.next问题是,当删除的是正数第一个节点时,由于第一个节点不存在『前驱节点』所以需要特殊处理var remove原创 2021-07-15 11:15:25 · 110 阅读 · 1 评论 -
15 三数之和(2021-07-09)
15. 三数之和链接:https://leetcode-cn.com/problems/3sum/题目描述见链接内容。解法1:三重循环+HasH去重想不到什么好的思路,于是就笨方法开干,用三种循环来进行比较,用一个HasH来保存已有的结果,用结果的前两个数字做key,够暴力var threeSum = function (nums) { const len = nums.length; if (len < 3) { return []; } const hash原创 2021-07-09 11:27:25 · 191 阅读 · 0 评论 -
剑指 Offer 22 链表中倒数第k个节点(2021-07-07)
剑指 Offer 22. 链表中倒数第k个节点链接:https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/解法1:两次遍历为什么我的思路总是和别人不一样,总是先想到别扭的笨的方法呢。既然求倒数第k个,那么我先求出链表总共多长,然后就知道是整数第几个了,然后再用一个指针走到那里就行了var getKthFromEnd = function (head, k) { let cur = head原创 2021-07-07 18:26:04 · 114 阅读 · 0 评论 -
12 整数转罗马数字(2021-07-07)
11. 盛最多水的容器链接:https://leetcode-cn.com/problems/integer-to-roman/题目描述见链接内容。解法1:高级API利用了JS的很多高级API,思路就是先把数字按照个位、十位、百位、千位拆成一个数组,然后倒序,从个位开始,通过配置区分区情况,然后再重新组合起来var intToRoman = function (num) { const DICT = { 0: {1: 'I', 5: 'V', 10: 'X'}, 1: {1原创 2021-07-07 10:36:56 · 282 阅读 · 0 评论 -
292 Nim游戏(2021-07-06)
292. Nim 游戏链接:https://leetcode-cn.com/problems/nim-game/题目描述见链接内容。是看到了一道字节跳动的面试题目:假设有130个苹果,你我轮流拿,每次可拿1-5个,如何保证你拿到最后一个苹果;找到了LeetCode上的对应的一道题目,先来把这个想清楚,就知道上面的题目如何解决了。不过也得承认,我的智商确实不太够用。解法1:动态规划(1)第一步:定义数组元素的含义用一个一维数组来表示当前数量下是否可以赢得游戏,true的代表可以(2原创 2021-07-06 18:22:07 · 203 阅读 · 0 评论 -
11 盛最多水的容器(2021-07-06)
11. 盛最多水的容器链接:https://leetcode-cn.com/problems/container-with-most-water/题目描述见链接内容。解法1:暴力法二话不说,暴力开干。分别以每两个坐标作为起始点,画出矩形,比较大小:var maxArea = function (height) { const len = height.length; let result = 0; for (let i = 0; i < len; i++) { fo原创 2021-07-06 10:12:33 · 94 阅读 · 0 评论 -
6 Z字形变换(2021-07-05)
6. Z 字形变换链接:https://leetcode-cn.com/problems/zigzag-conversion/题目描述见链接内容。解法1:二维数组看了一阵子题目,才看明白,所谓的Z字形排列是一个放倒了的Z想到了用二维数组解决,把所有信息按照规律填入到二维数组中即可,具体的逻辑在代码注释中:var convert = function (s, numRows) { if (numRows === 1) { return s; } const temp =原创 2021-07-05 16:19:13 · 292 阅读 · 1 评论 -
204 计数质数(2021.06.25)
160. 相交链表链接:https://leetcode-cn.com/problems/count-primes/题目描述见链接内容。解法1:暴力法二话不说,用暴力法解决这个问题,遍历n,对所有计数调用isPrime方法,isPrime中要注意的一个点是,结束循环的条件是x * x < n,不是n / 2,遍历到开方之前就可以完成所有的判断了var countPrimes = function (n) { let count = 0; for (let i = 2; i <原创 2021-06-25 11:12:41 · 166 阅读 · 0 评论 -
113 路径总和II(2021-06-24)
113. 路径总和II链接:https://leetcode-cn.com/problems/path-sum-ii/题目描述见链接内容。解法1:广度优先搜索在广度优先搜索时,重新构造了一个queue,原本的queue只用来存放未遍历的节点,现在queue的成员是一个对象,对象中包括了三个属性,node用来存放未遍历的节点,val存放遍历到当前节点前的历史路径求和,history保存当前节点前的历史路径var pathSum = function (root, targetSum) { l原创 2021-06-24 10:50:20 · 155 阅读 · 0 评论 -
5 最长回文串(2021-06-23)
5. 最长回文子串链接:https://leetcode-cn.com/problems/longest-palindromic-substring/题目描述见链接内容。解法1:动态规划(1)第一步:定义数组元素的含义dp[i][j]定义为从从i开始,到j结束的字符串是不是一个回文串,是的话填充true(2)第二步:找出数组元素之间的关系式如果一个子串是回文串,那么去掉首尾字符,剩下的子串也一定是回文串,那么就可以得到状态转义方程:dp[i][j] = dp[i + 1][j - 1]原创 2021-06-23 12:29:32 · 128 阅读 · 0 评论 -
169 多数元素(2021.06.10)
169. 多数元素链接:https://leetcode-cn.com/problems/majority-element/题目描述见链接内容。解法1:Hash法直觉的想到,可以利用一个额外的Map对象,在遍历数组过程中,存储每一项出现的次数,只要某一项的出现次数大元n.length / 2,返回它即可var majorityElement = function (nums) { const map = new Map(); const length = nums.length;原创 2021-06-10 14:48:40 · 162 阅读 · 2 评论 -
168. Excel表列名称(2021.06.09)
168. Excel表列名称链接:https://leetcode-cn.com/problems/excel-sheet-column-title/题目描述见链接内容。解法1:减一法这道题实质上就是进制转换的题目,将十进制转换为26进制,但是特别之处在,如果按照26进制转换,余数是0-25,而现在的转换余数是1-26,对应A-Z,现在需要消除这两个之间的差异解法1就是把被除数减一首先找到字符转换的基准,String.fromCharCode(65),对应字母A这个时候,如果n等于1,对2原创 2021-06-09 17:17:59 · 156 阅读 · 2 评论 -
155 两数之和 II - 输入有序数组(2021.06.07)
167. 两数之和 II - 输入有序数组链接:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/题目描述见链接内容。解法1:哈希法与无序数组的解法相同,声明一个辅助的Map对象,key是target减去当前遍历的数组的值,valu是当前值的序号遍历数组的时候判断Map对象中是否存在当前值即可var twoSum = function(numbers, target) { const map = new原创 2021-06-07 21:22:05 · 192 阅读 · 1 评论 -
160. 相交链表(2021.06.04)
160. 相交链表链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/题目描述见链接内容。解法1:暴力法二话不说,用暴力法解决这个问题,先遍历headA,看headA的每一个节点,是否在headB存在,也就是说,每一个headA的节点,都要在headB中全部过一遍效率之低下就不用说了var getIntersectionNode = function(headA, headB) { let a =原创 2021-06-05 19:37:49 · 107 阅读 · 2 评论 -
48. 旋转图像(2021.06.04)
48. 旋转图像链接:https://leetcode-cn.com/problems/rotate-image/题目描述见链接内容。解法1:辅助数组既然让原地修改数组,但是我又想不出来如何直接修改,就像之前做的一道题目一样,直接声明一个新的数组,把调换后的数组按顺序推入新的数组中就行了然后需要找到替换的规律,脑子不够用,就用了3x3的矩阵,一个一个列,用归纳法,找到规律:temp[j][length - i - 1] = matrix[i][j]; // i是行,j是列然后把得到的te原创 2021-06-04 10:16:55 · 119 阅读 · 0 评论 -
155. 最小栈(2021.06.03)
155. 最小栈链接:https://leetcode-cn.com/problems/min-stack/题目描述见链接内容。解法1:辅助栈想到了用一个辅助栈来解决问题,但是总是想着入栈和出栈前把辅助栈排序,这样就总是没法在常数时间内完成getMin的操作要理解栈『先进后出』的特性,a入栈时,如果有栈中已经有了b、c和d,在a没出栈之前,b,c,d一定在栈中,也就是说,只要a在栈顶,那么栈中元素一定是a、b、c和d,也就说说,a在栈顶时,最小值一定是确定的我们把这个与a在栈顶对应的最小值放原创 2021-06-03 10:22:27 · 76 阅读 · 0 评论 -
141. 环形链表(2021-06-01)
141. 环形链表链接:https://leetcode-cn.com/problems/linked-list-cycle/题目描述见链接内容。解法1:标记链表首先想到的是,在遍历这个链表时,为每个节点添加一个属性visited,如果再次遍历到visited为true时,说明出现了环var hasCycle = function (head) { while (head) { if (head.visited) { return true; } hea原创 2021-06-01 21:32:04 · 124 阅读 · 0 评论 -
112. 路径总和(2021-05-26)
112. 路径总和链接:https://leetcode-cn.com/problems/path-sum/题目描述见链接内容。解法1:深度优先深度优先思路很快就做出来了,和昨天也又不一样,我的思路在向下递归寻找的同时,更新targetSum,判断当前是不是叶子节点,如果是的话再判断是不是和target相等var hasPathSum = function (root, targetSum) { return judge(root, targetSum);};function jud原创 2021-05-26 11:29:19 · 98 阅读 · 0 评论 -
111. 二叉树的最小深度(2021-05-25)
111. 二叉树的最小深度链接:https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/题目描述见链接内容。要熟悉叶子节点这个概念,叶子节点指的就是没有子节点的节点解法1:广度优先搜索(BFS)我这个脑袋,就不太适合去考虑递归的问题,DFS一碰就完蛋,就这么简单的递归,我也总是出错,总是差一点。所以先从BFS下手,和之前求二叉树最大深度的方法基本是一样的,只是在内层循环时添加了一个判断出它是叶子节点就跳出的步骤var min原创 2021-05-25 15:11:12 · 166 阅读 · 1 评论 -
110. 平衡二叉树(2021-05-21)
110. 平衡二叉树来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/balanced-binary-tree/题目描述见链接内容。分析二叉树我总是搞不太明白,这道题又卡住了,没信心了需要用到递归的方式判断,因为一颗二叉树是平衡树,那它的子树也都是平衡树解法1:自顶向下前几天刚刚学习过,如果求一个二叉树的最大深度:function getHeight(node) { if (!node) { return 0; }原创 2021-05-21 10:08:09 · 92 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树-Fail
108. 将有序数组转换为二叉搜索树链接:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/题目描述见链接内容。分析虽然是简单题目,但是还是没有做出来,因为不知道二叉查找的特点,另外一遇到递归的问题,总是感觉自己脑子不够用,太抽象,看了官方题解才做出来太笨了深度优先搜索首先需要回顾一下二叉树的深度优先搜索的几种遍历方式:(1)前序遍历:根 → 左 → 右(2)中序遍历:左 → 根 →原创 2021-05-18 13:49:11 · 141 阅读 · 0 评论 -
104. 二叉树的最大深度(2021-05-17)
104. 二叉树的最大深度链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/题目描述见链接内容。解法1:深度度优先搜索之前还看过这道题目,结果怎么都想不明白了。利用深度优先搜索,思路是递归调用,先找出边界条件:if (!root) { return 0;}然后考虑迭代条件,每个节点的最大深度是其左子树和右子树的最大深度加上1构成的,所以迭代条件就是:maxDepth = max(leftDepth,原创 2021-05-17 11:52:02 · 213 阅读 · 0 评论 -
101. 对称二叉树(2021-05-14)
101. 对称二叉树链接:https://leetcode-cn.com/problems/symmetric-tree/题目描述见链接内容。解法1:广度优先搜索利用广度优先搜索的原理,实际上与昨天的《相同的树》原理相同,就是将给定的数组做一个镜像,做镜像无非是推入队列的顺序不同,然后看两个树是不是相同的比较笨,又是先声明了两个数组,分别放两个数组的结果:var isSymmetric = function (root) { const queue1 = [root]; const原创 2021-05-14 12:16:27 · 79 阅读 · 0 评论 -
100. 相同的树(2021-05-13)
100. 相同的树链接:https://leetcode-cn.com/problems/same-tree/题目描述见链接内容。解法1:广度优先搜索占了便宜的是昨天正好做到二叉树遍历的题目,所以今天比较顺利的完成了,一开始想用深度优先搜索完成,但是递归的返回结果总是有点糊涂,但是记住了之前的教训,先把简单的、有思路的、即便是暴力算法的解法做出来,再考虑别的解法声明了两个临时数组,分别放置p和q的后续节点,然后去遍历这两个数组就可以了,需要把两棵树节点存在情况不一致时分类别考虑,思路就清晰了:原创 2021-05-13 10:30:22 · 86 阅读 · 0 评论 -
94. 二叉树的中序遍历(2021-05-12)
94. 二叉树的中序遍历链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal/题目描述见链接内容。解法1:递归二叉树的遍历使用递归很直观,也不复杂:var inorderTraversal = function(root) { const result = []; if (root) { result.push(...inorderTraversal(root.left));原创 2021-05-12 10:27:33 · 312 阅读 · 0 评论 -
88. 合并两个有序数组(2021-05-11)-Fail
88. 合并两个有序数组链接:https://leetcode-cn.com/problems/merge-sorted-array/题目描述见链接内容。分析这道题啊,又没做出来,其实第一种最直观的想法是知道的,但是觉得不应该使用splice方法,所以就想到用指针,但是题目要求不返回新的数组,而是对nums1直接进行修改,所以第二种方法(利用临时变量的双指针)就忽略了研究了好一阵子用指针直接修改nums1的方法,行到了双指针甚至三指针,结果因为智商不够,就白费劲了,看了题解才明白怎么回事需要原创 2021-05-11 13:33:08 · 123 阅读 · 2 评论 -
83. 删除排序链表中的重复元素(2021-05-10)
83. 删除排序链表中的重复元素链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/题目描述见链接内容。解法1又是一道关于链表的简单题目,但是我花了好长时间,反复调试才做出来,倒不是思路有多复杂,实际上思路比较简单,因为这个链表是升序的,所以只需要比较前后两个节点的值就可以,如果前后两个节点的值相同,就略过相同的节点,如果不相同的话,就为赋值给结果节点思路很简单,但是我遇到的麻烦在于:(1)如何正确的表原创 2021-05-10 11:27:23 · 74 阅读 · 0 评论 -
67. 二进制求和(2021-05-08)
67. 二进制求和链接:https://leetcode-cn.com/problems/add-binary/题目描述见链接内容。解法1:列竖式一开始想直接使用parseInt和toString完成,但是JS的最大安全正式是${2^{53} - 1}$,测试用例超出了这个计算范围,计算结果不对了所以需要逐位计算,思路不难,但是要小心,我并没有一次写对,通过测试用例,调试了好几次才通过,要是手写的话就出问题了。主要是每一位相加的结果,除了0/1/2,还有3var addBinary = fu原创 2021-05-08 10:32:32 · 114 阅读 · 1 评论 -
66. 加一(2021-05-07)
66. 加一链接:https://leetcode-cn.com/problems/plus-one/题目描述见链接内容。解法1:倒着遍历看了一下提交记录,19年就做过了,思路和倒是基本是一样,从数组最后一位开始遍历,用一个toAdd变量来存储进位数,一开始加一,那么toAdd的初始值就是1,然后不断遍历即可要注意的是,最后要判断一下toAdd是否为0,不为0时还需要补位,例如9的情况下var plusOne = function (digits) { const length = di原创 2021-05-07 10:10:02 · 84 阅读 · 0 评论 -
58. 最后一个单词的长度(2021-05-06)
58. 最后一个单词的长度链接:https://leetcode-cn.com/problems/length-of-last-word/题目描述见链接内容。解法1:动态规划我理解这道题目与求连续最大子串那道题目有一点类似,在遍历过程中,判断字符串是不是' ',然后不断更新temp值,并且在temp不为空时,才更新result,这样保证result始终是非空字符串的长度var lengthOfLastWord = function (s) { let result = 0, tem原创 2021-05-06 15:56:43 · 71 阅读 · 0 评论 -
374 猜数字大小(2021-04-29)
374. 猜数字大小链接:https://leetcode-cn.com/problems/guess-number-higher-or-lower/题目描述见链接内容。解法:二分法仍然是在练习二分法时找到的这道题目,自然想到了使用二分法,感觉以后不能按照这个套路来,否则不知道突然碰到这道题目,能否想到使用二分法这道题目具备使用二分法的两个特性:输入有序guess函数返回的结果能让我们不断缩小迭代规模然后按照那个套路,就可以把二分法的答案写出来:var guessNumber =原创 2021-04-29 09:41:27 · 232 阅读 · 0 评论 -
69 x 的平方根(2021-04-28)
69. x 的平方根链接:https://leetcode-cn.com/problems/sqrtx/题目描述见链接内容。解法:二分法因为是在集中练习二分法时做到这道题目,自然而然就想到了使用二分法,按照那个套路:while的条件仍然是left < right因为题目要找的平方根,并且只保留整数部分,实际上要找的就是平方小于等于x的最后一个下标,按照套路,if的条件取反,那就是mid * mid > x,这样mid实际上是不需要保留的,所以if下面的缩小规模的公式就是righ原创 2021-04-28 16:50:40 · 202 阅读 · 0 评论