
leetcode-js
M_Eve
这个作者很懒,什么都没留下…
展开
-
(js)leetcode 104. 二叉树的最大深度
(js)leetcode 104. 二叉树的最大深度原创 2023-03-07 22:33:30 · 432 阅读 · 1 评论 -
(js)leetcode 278. 第一个错误的版本
题目:你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。 假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。 你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。原创 2021-09-01 22:12:14 · 403 阅读 · 0 评论 -
(js)leetcode 11. 盛最多水的容器
题目:给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0) 。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为49。示例 ...原创 2021-03-25 23:20:43 · 241 阅读 · 0 评论 -
(js)leetcode 9. 回文数
题目:给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入:x = 10输出:false解释:从右向左读, 为 01 。因此它不是一个回.原创 2021-03-24 23:21:43 · 356 阅读 · 0 评论 -
(js)leetcode 406. 根据身高重建队列
最近感觉到自己在算法知识方面的匮乏,所以从今天起,每天一题leetcode,今天就先将flag立在这了。假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]原创 2020-11-16 23:18:08 · 277 阅读 · 0 评论 -
(js)leetcode 1030. 距离顺序排列矩阵单元格
题目:给出 R 行 C 列的矩阵,其中的单元格的整数坐标为 (r, c),满足 0 <= r < R 且 0 <= c < C。另外,我们在该矩阵中给出了一个坐标为(r0, c0) 的单元格。返回矩阵中的所有单元格的坐标,并按到 (r0, c0) 的距离从最小到最大的顺序排,其中,两单元格(r1, c1) 和 (r2, c2) 之间的距离是曼哈顿距离,|r1 - r2| + |c1 - c2|。(你可以按任何满足此条件的顺序返回答案。)示例 1:输入:R..原创 2020-11-17 23:01:48 · 258 阅读 · 0 评论 -
(js)leetcode 134. 加油站
人吧,总是会在不断学习的过程中发现自己是多么的无知,好吧,我说的是我自己。做完题,再去看别人的解题思路,发现自己的知识储备真的是太少了,数据结构与算法得看起来了,否则只寄希望于在刷题中来汲取知识,效率太低了。俗话说得好,种一棵树最好的时间是十年前,其次就是现在。那么现在开始就好啦,下面就开始上今天的菜。题目:在一条环路上有N个加油站,其中第i个加油站有汽油gas[i]升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1个加油站需要消耗汽油cost[i]...原创 2020-11-18 22:19:49 · 172 阅读 · 0 评论 -
(js)leetcode 283. 移动零
今天的这道题特别简单题目:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数思路:1. i 从数组头部开始移动, j 指向数组最后一个值2. 判断第 i 个位置的值是否为 0 1)如果第 i 个位置的值为 0, 则删除当前位置的值,然后将原数组中最后一个元素的值设为 0,j 向前移动一.原创 2020-11-19 18:32:28 · 132 阅读 · 0 评论 -
(js)leetcode 147. 对链表进行插入排序
以前学c++的时候经常做这种题,但由于长时间没有用,现在已经忘得差不多了题目:对链表进行插入排序。插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插原创 2020-11-20 23:02:33 · 317 阅读 · 0 评论 -
(js)leetcode 7. 整数翻转
今天去参加了个婚礼,所以挑了个简单的,话不多说,赶快上代码了,今天马上就要结束了题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231,231− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。思路:1. 将数字转为字符...原创 2020-11-21 23:54:22 · 117 阅读 · 0 评论 -
(js)leetcode 242. 有效的字母异位词
今天的又是简单的题题目:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?思路:1. 将两个字符串转为数组2. 调用数组的排序方法进行排.原创 2020-11-22 18:42:13 · 161 阅读 · 0 评论 -
(js)leetcode 28. 实现 strStr()
这两天写的简单的题,感觉不是在学习算法了,而是在巩固我的js基础了,下次简单的得加量啊题目:实现strStr()函数。给定一个haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回-1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa", needle = "bba"...原创 2020-11-23 18:35:38 · 109 阅读 · 0 评论 -
(js)leetcode 1. 两数之和
题目:给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]思路:遍历数组中的元素,查看是否存在与之相对应的代码实现:/** * @param {numbe...原创 2020-11-24 19:10:44 · 155 阅读 · 0 评论 -
(js)leetcode 1370. 上升下降字符串
题目:给你一个字符串s,请你根据下面的算法重新构造字符串:从 s中选出 最小的字符,将它 接在结果字符串的后面。从 s剩余字符中选出最小的字符,且该字符比上一个添加的字符大,将它 接在结果字符串后面。重复步骤 2 ,直到你没法从 s中选择字符。从 s中选出 最大的字符,将它 接在结果字符串的后面。从 s剩余字符中选出最大的字符,且该字符比上一个添加的字符小,将它 接在结果字符串后面。重复步骤 5,直到你没法从 s中选择字符。重复步骤 1 到 6 ,...原创 2020-11-25 18:51:27 · 147 阅读 · 0 评论 -
(js)leetcode 21. 合并两个有序链表
题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路:1. 设定一个哨兵节点 prevHead2. 比较 l1 和 l2 当前节点的值,讲较小的那个节点接在 prev 指针后面3. 当l1、l2其中一个链表为空时,将剩下的那一个直接接在合并的链表后面代码实现:/** *.原创 2020-11-26 18:56:50 · 409 阅读 · 1 评论 -
(js)leetcode 167. 两数之和 II - 输入有序数组
题目:给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1必须小于index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], target = 9输出: [1,2]解释: 2 与 7 之和等于目标数 9 。因此 index1...原创 2020-11-27 22:58:15 · 185 阅读 · 0 评论 -
(js)leetcode 15. 三数之和
题目:给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]思路:今天写这道题有些曲折,好不容易写完代码点击提交,然后超时了只好重新换个思路,结果换了之后,每次提交总...原创 2020-11-28 21:42:22 · 357 阅读 · 0 评论 -
(js)leetcode 18. 四数之和
题目:给定一个包含n 个整数的数组nums和一个目标值target,判断nums中是否存在四个元素 a,b,c和 d,使得a + b + c + d的值与target相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0,...原创 2020-11-29 19:46:03 · 289 阅读 · 0 评论 -
(js)leetcode 653. 两数之和 IV - 输入 BST
题目:给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。案例 1:输入: 5 / \ 3 6/ \ \2 4 7Target = 9输出: True案例 2:输入: 5 / \ 3 6/ \ \2 4 7Target = 28输出: False思路:1. 遍历整棵树,在树的每个节点上遍历它的左子树和右子树2....原创 2020-11-30 22:14:02 · 145 阅读 · 0 评论 -
(js)leetcode 2. 两数相加
题目:给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807思路:将两个链表中的数,以及进位数相加,...原创 2020-12-01 18:45:58 · 121 阅读 · 0 评论 -
(js)leetcode 371. 两整数之和
题目:不使用运算符+ 和-,计算两整数a、b之和。示例 1:输入: a = 1, b = 2输出: 3示例 2:输入: a = -2, b = 3输出: 1思路:使用位运算符实现相加,和数字电路中的加法器原理相同1. a ^ b是无进位的相加2. a&b得到每一位的进位3. 让无进位相加的结果不断与进位进行异或操作,直至进位为0(进行到第3步的时候,我毫不犹豫的写了,while循环,然后使用 sum+=,这个...原创 2020-12-02 18:21:45 · 127 阅读 · 0 评论 -
(js)leetcode 415. 字符串相加
题目:给定两个字符串形式的非负整数num1 和num2,计算它们的和。提示:num1 和num2的长度都小于 5100num1 和num2 都只包含数字0-9num1 和num2 都不包含任何前导零你不能使用任何內建 BigInteger 库,也不能直接将输入的字符串转换为整数形式思路:1. 比较两个字符串的长度,将较短的那个前面补足 02. 将两个字符串转为倒序数组3. 将字符串中的数据两两相加,并加上上一个位置的进位4. 若最后一个进位大于0,则加入...原创 2020-12-03 18:45:33 · 407 阅读 · 0 评论 -
(js)leetcode 989. 数组形式的整数加法
题目:对于非负整数X而言,X的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果X = 1231,那么其数组形式为[1,2,3,1]。给定非负整数 X 的数组形式A,返回整数X+K的数组形式。示例 1:输入:A = [1,2,0,0], K = 34输出:[1,2,3,4]解释:1200 + 34 = 1234示例 2:输入:A = [2,7,4], K = 181输出:[4,5,5]解释:274 + 181 = 455示例 3:输入:A = [2...原创 2020-12-04 18:34:12 · 131 阅读 · 0 评论 -
(js)leetcode 66. 加一
题目:给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例1:输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。示例2:输入:digits = [4,3,2,1]输出:[4,3,2,2]解释:输入数组表示数字 4321。示例 3:输入:digits = [0]输出:[1]提示:...原创 2020-12-05 20:40:58 · 129 阅读 · 0 评论 -
(js)leetcode 67. 二进制求和
题目:给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字1和0。示例1:输入: a = "11", b = "1"输出: "100"示例2:输入: a = "1010", b = "1011"输出: "10101"提示:每个字符串仅由字符 '0' 或 '1' 组成。1 <= a.length, b.length <= 10^4字符串如果不是 "0" ,就都不含前导零。思路:和十进制字符串相加的思路相同,...原创 2020-12-06 19:16:14 · 307 阅读 · 0 评论 -
(js)leetcode 3. 无重复字符的最长子串
题目:给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: s = "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,...原创 2020-12-07 20:13:36 · 171 阅读 · 0 评论 -
(js)leetcode 1122. 数组的相对排序
题目:思路:代码实现:运行结果:原创 2020-12-08 23:57:53 · 231 阅读 · 0 评论 -
(js)leetcode 5. 最长回文子串
题目:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"思路:按照自己的思路去写了代码,结果提交了多次之后,发现总是会有问题,然后就去参考了一下别人的思路,要多做些类似的题,然后进行总结1. dp[j][i]代表从j->i2. dp[j+1][i-1]代表的是子字符串的首->尾.原创 2020-12-09 18:18:47 · 276 阅读 · 0 评论 -
(js)leetcode 26. 删除排序数组中的重复项
题目:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 ...原创 2020-12-10 18:31:30 · 146 阅读 · 1 评论 -
(js)leetcode 27. 移除元素
题目:给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。示例2:给定 nums = [...原创 2020-12-11 18:49:02 · 101 阅读 · 0 评论 -
(js)leetcode 35. 搜索插入位置
题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0思路:刚开始想直接使用js循环判断一下求解的,可是提交之后,提示内部错误,于是不得不转换一下思路.原创 2020-12-12 21:49:28 · 226 阅读 · 0 评论 -
(js)leetcode 88. 合并两个有序数组
题目:给你两个有序整数数组nums1 和 nums2,请你将 nums2 合并到nums1中,使 nums1 成为一个有序数组。说明:初始化nums1 和 nums2 的元素数量分别为m 和 n 。你可以假设nums1有足够的空间(空间大小大于或等于m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]提示:-...原创 2020-12-13 22:44:14 · 208 阅读 · 1 评论 -
(js)leetcode 155. 最小栈
题目:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop()—— 删除栈顶的元素。top()—— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,nul..原创 2020-12-14 20:33:47 · 289 阅读 · 0 评论 -
(js)leetcode 71. 简化路径
题目:以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..)表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必须是表示绝对路径的最短字符.原创 2020-12-15 22:37:10 · 195 阅读 · 0 评论 -
(js)leetcode 94. 二叉树的中序遍历
题目:给定一个二叉树的根节点 root ,返回它的 中序遍历。示例 1:输入:root = [1,null,2,3]输出:[1,3,2]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[2,1]示例 5:输入:root = [1,null,2]输出:[1,2]提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val &.原创 2020-12-16 22:31:03 · 313 阅读 · 0 评论 -
(js)leetcode 144. 二叉树的前序遍历
题目:给你二叉树的根节点 root ,返回它节点值的前序遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[1,2]示例 5:输入:root = [1,null,2]输出:[1,2]提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <..原创 2020-12-17 22:36:05 · 162 阅读 · 0 评论 -
(js)leetcode 145. 二叉树的后序遍历
题目:给定一个二叉树,返回它的 后序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [3,2,1]思路:后序遍历——即以左 右 中 的方式遍历整棵树代码实现:/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? ...原创 2020-12-18 19:22:25 · 100 阅读 · 0 评论 -
(js)leetcode 316. 去除重复字母
题目:给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。注意:该题与 1081 https://leetcode-cn.com/problems/smallest-subsequence-of-distinct-characters 相同示例 1:输入:s = "bcabc"输出:"abc"示例 2:输入:s = "cbacdcbc"输出:"acdb"提示:1 <= s..原创 2020-12-19 19:38:43 · 515 阅读 · 1 评论 -
(js)leetcode 349. 两个数组的交集
题目:给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。思路:1. 将第一个数组放入map中,并标记其数值为true2. 遍历第二个数组,如果第二个数组中的值在第一个数组中存在,并且该值未被比较过,则按原创 2020-12-20 21:44:27 · 187 阅读 · 0 评论 -
(js)leetcode 350. 两个数组的交集 II
题目:给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。我们可以不考虑输出结果的顺序。思路:1. 统计数组1中每位数值出现的次数2. 遍历数组2,每找到一位与数组1中的数值匹配的值时,将数组原创 2020-12-21 22:28:56 · 399 阅读 · 1 评论