leetcode 中等题 medium
进击的桐人
写些心得,不时回看
展开
-
LeetCode-1382-将二叉搜索树变平衡-JavaScript
题目给你一棵二叉搜索树,请你返回一棵 平衡后 的二叉搜索树,新生成的树应该与原来的树有着相同的节点值。如果一棵二叉搜索树中,每个节点的两棵子树高度差不超过 1 ,我们就称这棵二叉搜索树是 平衡的 。如果有多种构造方法,请你返回任意一种。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/balance-a-binary-search-tr...原创 2020-03-23 11:43:18 · 370 阅读 · 0 评论 -
leetcode--中级算法--数组和字符串--递增的三元子序列(JavaScript)
给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。数学表达式如下:如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1,使得 arr[i] < arr[j] < arr[k] ,返回 true ; 否则返回 false 。说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1) 。示例 1:输入: [1,...原创 2018-11-14 14:16:27 · 256 阅读 · 0 评论 -
LeetCode——938 二叉搜索树的范围和
给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。二叉搜索树保证具有唯一的值。示例 1:输入:root = [10,5,15,3,7,null,18], L = 7, R = 15输出:32示例 2:输入:root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10输出:23提示:树中的结点数量最多为 10...原创 2018-11-15 16:25:41 · 398 阅读 · 0 评论 -
LeetCode——中级算法——树和图——二叉树的锯齿形层序遍历(JavaScript)
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[ [3], [20,9], [15,7]]思路:还记得层序遍历吗?用一个队列...原创 2018-11-15 15:32:00 · 187 阅读 · 0 评论 -
leetcode-中级算法-数组和字符串-最长回文字串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。示例 1:输入: “babad”输出: “bab”注意: "aba"也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”思路这道题很显然可以用暴力求解,但时间复杂度太高,也起不到刷题的训练作用。搜了一下,全是关于manacher的算法。看了好久才弄懂的。写这篇也是来巩固梳理一下(其...原创 2018-11-13 19:27:43 · 127 阅读 · 0 评论 -
leetcode——中级算法——数组和字符串——无重复字符的最长字串
给定一个字符串,找出不含有重复字符的最长子串的长度。示例1输入: "abcabcbb"输出: 3 解释: 无重复字符的最长子串是 "abc",其长度为 3示例2输入: "bbbbb"输出: 1解释: 无重复字符的最长子串是 "b",其长度为 1。示例3输入: "pwwkew"输出: 3解释: 无重复字符的最长子串是 "wke",其长度为 3。 请注意,原创 2018-11-13 14:30:15 · 178 阅读 · 0 评论 -
leetcode 524.通过删除字母匹配到字典里最长单词
给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。示例 1:输入:s = “abpcplea”, d = [“ale”,“apple”,“monkey”,“plea”]输出:“apple”示例 2:输入:s = “abpcplea”, d =...原创 2018-11-13 11:11:10 · 533 阅读 · 0 评论 -
LeetCode-中级-字谜分组
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"],输出:[ ["ate","eat","tea"], ["nat","tan"],原创 2018-09-26 17:43:08 · 422 阅读 · 0 评论 -
LeetCode-中级-矩阵置零(JavaScript)
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例 1:输入: [ [1,1,1], [1,0,1], [1,1,1]]输出: [ [1,0,1], [0,0,0], [1,0,1]]示例 2:输入: [ [0,1,2,0], [3,4,5,2], [1,3,1,5]]...原创 2018-09-26 09:46:33 · 368 阅读 · 0 评论 -
LeetCode——中级算法——数组和字符串——三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]思路如果这题用暴力求解,三层循环,...原创 2018-11-14 15:34:56 · 187 阅读 · 0 评论 -
LeeCode——中级算法——链表——奇偶链表(JavaScript)
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2-&g...原创 2018-11-15 10:38:43 · 474 阅读 · 0 评论 -
LeetCode——918. 环形子数组的最大和(JavaScript)
给定一个由整数数组 A 表示的环形数组 C,求 C 的非空子数组的最大可能和。在此处,环形数组意味着数组的末端将会与开头相连呈环状。(形式上,当0 <= i < A.length 时 C[i] = A[i],而当 i >= 0 时 C[i+A.length] = C[i])此外,子数组最多只能包含固定缓冲区 A 中的每个元素一次。(形式上,对于子数组 C[i], C[i+1]...原创 2018-11-22 16:32:00 · 559 阅读 · 0 评论 -
LeetCode——954.二倍数对数组
给定一个长度为偶数的整数数组 A,只有对 A 进行重组后可以满足 “对于每个 0 <= i < len(A) / 2,都有 A[2 * i + 1] = 2 * A[2 * i]” 时,返回 true;否则,返回 false。示例 1:输入:[3,1,3,6]输出:false示例 2:输入:[2,1,2,6]输出:false示例 3:输入:[4,-2,2,-4]输...原创 2018-12-11 16:34:40 · 693 阅读 · 0 评论 -
LeetCode——958.二叉树的完全性检验(JavaScript)
给定一个二叉树,确定它是否是一个完全二叉树。若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h 个节点。)树中将会有 1 到 100 个结点。思路先使用层序遍历将所有节点以及他们的左右子节点(即使为空)都加入到一个数组 nodes 中,形如 [1,2,...原创 2018-12-17 11:21:47 · 834 阅读 · 0 评论 -
LeetCode——950.按递增顺序显示卡牌
牌组中的每张卡牌都对应有一个唯一的整数。你可以按你想要的顺序对这套卡片进行排序。最初,这些卡牌在牌组里是正面朝下的(即,未显示状态)。现在,重复执行以下步骤,直到显示所有卡牌为止:从牌组顶部抽一张牌,显示它,然后将其从牌组中移出。如果牌组中仍有牌,则将下一张处于牌组顶部的牌放在牌组的底部。如果仍有未显示的牌,那么返回步骤 1。否则,停止行动。返回能以递增顺序显示卡牌的牌组顺序。答案中...原创 2018-12-06 17:38:28 · 276 阅读 · 0 评论 -
LeetCode——89. 格雷编码(JavaScript)
格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。示例 1:输入: 2输出: [0,1,3,2]解释:00 - 001 - 111 - 310 - 2对于给定的 n,其格雷编码序列并不唯一。例如,[0,2,3,1] 也是一个有效的格雷编码序列。00 - 0...原创 2018-11-28 16:23:49 · 357 阅读 · 0 评论 -
LeetCode——946. 验证栈序列(JavaScript)
给定 pushed 和 popped 两个序列,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3), push(4), ...原创 2018-11-27 21:13:21 · 504 阅读 · 0 评论 -
LeetCode——945.使数组唯一的最小增量(JavaScript)
给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1。返回使 A 中的每个值都是唯一的最少操作次数。示例 1:输入:[1,2,2]输出:1解释:经过一次 move 操作,数组将变为 [1, 2, 3]。示例 2:输入:[3,2,1,2,1,7]输出:6解释:经过 6 次 move 操作,数组将变为 [3, 4, 1, 2, 5, 7]。可以看出 5 次...原创 2018-11-27 10:16:44 · 712 阅读 · 0 评论 -
LeetCode--230.二叉搜索树中第K小的元素(JavaScript)
给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 1示例 2:输入: root = [5,3,6,2,4,null,null,1], k ...原创 2018-11-26 17:31:00 · 540 阅读 · 0 评论 -
LeetCode——中级算法——排序和搜索——前K个高频元素(JavaScript)
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]说明:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。...原创 2018-11-26 16:00:43 · 446 阅读 · 0 评论 -
46. 全排列(JavaScript)
给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]思路:全排列是经典回溯算法的应用场景,关于回溯算法的详细介绍,请自行搜索。这里只做简单介绍。回溯算法是一种类似枚举的搜索尝试过程,主要在搜索尝试过程中寻...原创 2018-09-05 09:26:29 · 2106 阅读 · 0 评论 -
12. 整数转罗马数字(JavaScript)
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1...原创 2018-08-30 16:00:01 · 536 阅读 · 0 评论 -
313. 超级丑数(JavaScript)
编写一段程序来查找第 n 个超级丑数。超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数。示例:输入: n = 12, primes = [2,7,13,19]输出: 32 解释: 给定长度为 4 的质数列表 primes = [2,7,13,19],前 12 个超级丑数序列为:[1,2,4,7,8,13,14,16,19,26,28,32] 。...原创 2018-08-16 15:33:41 · 273 阅读 · 0 评论 -
22. 括号生成(JavaScript)
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]思路:此题已有官方的三种标准答案,不在啰嗦。请看括号生成解决方法。这里附上JavaScript版本。/** * @par...原创 2018-08-08 17:21:37 · 1473 阅读 · 0 评论 -
90. 子集 II(JavaScript)
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[ [2], [1], [1,2,2], [2,2], [1,2], []]思路:这道题的前身:78.子集,输入的数组不包含重复元素。而这道题包含重复元素,如果继续按照78那道题的解法,解集中必然会包含重...原创 2018-08-07 20:10:32 · 239 阅读 · 0 评论 -
78. 子集(JavaScript)
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]思路:本题有规律可循。设置初始二维数组:[ [ ] ] 。依次把每个数加入到数组中...原创 2018-08-07 14:40:59 · 1096 阅读 · 0 评论 -
144. 二叉树的前序遍历(JavaScript)
给定一个二叉树,返回它的 前序 遍历。 示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]进阶: 递归算法很简单,你可以通过迭代算法完成吗?解法一:递归法递归法很简单,按照根节点、左子树、右子树的顺序。JavaScript中数组的连接使用concat,且此函数并不改变数组本身。/** * ...原创 2018-08-07 11:02:40 · 1718 阅读 · 0 评论 -
94. 二叉树的中序遍历(JavaScript)(迭代法与递归法)
给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?解法一:递归法递归法不多说,按照左子树、根节点、右子树的顺序进行遍历。递归法也有两种写法,一种是递归函数本身,一种是在闭包中递归(即在函数中创建新函数,递归这个新函数...原创 2018-08-07 10:45:07 · 976 阅读 · 0 评论 -
654. 最大二叉树(JavaScript)
给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。 左子树是通过数组中最大值左边部分构造出的最大二叉树。 右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。Example 1:输入: [3,2,1,6,0,5]输入: 返回下面这棵树的根节点: 6 /...原创 2018-07-31 15:36:04 · 353 阅读 · 0 评论 -
535. TinyURL 的加密与解密(JavaScript)
TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl 时,它将返回一个简化的URL http://tinyurl.com/4e9iAk.要求:设计一个 TinyURL 的加密 encode 和解密 decode 的方法。你的加密和解密算法如何设计和运作是没有限制的,你只需要保证一个URL可以被加...原创 2018-07-31 12:40:29 · 1336 阅读 · 0 评论 -
264. 丑数 II(JavaScript)
编写一个程序,找出第 n 个丑数。丑数就是只包含质因数 2, 3, 5 的正整数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明: 1 是丑数。 n 不超过1690。思路:这道题是丑数Ⅱ,前一道题请看丑数 Ⅰ.这里第一反应是利用丑数Ⅰ的函数,对于每个数都判断是否为丑数。但这...原创 2018-08-15 20:04:23 · 342 阅读 · 0 评论 -
304. 二维区域和检索 - 矩阵不可变(JavaScript)
给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2)。上图子矩阵左上角 (row1, col1) = (2, 1) ,右下角(row2, col2) = (4, 3),该子矩形内元素的总和为 8。示例:给定 matrix = [ [3, 0, 1, 4, 2], [5, 6, 3, 2, 1],...原创 2018-08-16 20:33:10 · 498 阅读 · 0 评论 -
48. 旋转图像(JavaScript)
给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9,6,3...原创 2018-08-26 15:43:11 · 813 阅读 · 0 评论 -
537. 复数乘法(JavaScript)
给定两个表示复数的字符串。返回表示它们乘积的字符串。注意,根据定义 i2 = -1 。示例 1:输入: "1+1i", "1+1i"输出: "0+2i"解释: (1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i ,你需要将它转换为 0+2i 的形式。示例 2:输入: "1+-1i", "1+-1i"输出: "0+-2i"解释:原创 2018-08-30 15:21:17 · 941 阅读 · 0 评论 -
338. 比特位计数(JavaScript)
给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例 2:输入: 5输出: [0,1,1,2,1,2]进阶:给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但你可以在线性时间O(n)内用一趟扫描做到吗? 要求算法的空...原创 2018-08-25 16:38:52 · 448 阅读 · 0 评论 -
59. 螺旋矩阵 II(JavaScript)
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入: 3输出:[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]]思路:这和上一道题很类似:54.螺旋矩阵1、初始化结果矩阵2、设置上下左右4个变量3、设置当前要添加的元素4、逐个添加元素/** * @param...原创 2018-08-25 16:01:38 · 469 阅读 · 0 评论 -
238. 除自身以外数组的乘积(JavaScript)(完美满足要求)
给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。进阶:你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的...原创 2018-08-29 20:04:21 · 431 阅读 · 0 评论 -
54. 螺旋矩阵(JavaScript)
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例 2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]]...原创 2018-08-25 11:29:36 · 593 阅读 · 0 评论 -
713. 乘积小于K的子数组(JavaScript)
给定一个正整数数组 nums。找出该数组内乘积小于 k 的连续的子数组的个数。示例 1:输入: nums = [10,5,2,6], k = 100输出: 8解释: 8个乘积小于100的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。需要注意的是 [10,5,2] 并不是乘积小于100的子数组。说明:...原创 2018-08-17 16:02:57 · 461 阅读 · 0 评论 -
814. 二叉树剪枝(JavaScript)
给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。返回移除了所有不包含 1 的子树的原二叉树。( 节点 X 的子树为 X 本身,以及所有 X 的后代。)示例1:输入: [1,null,0,0,1]输出: [1,null,0,null,1] 解释: 只有红色节点满足条件“所有不包含 1 的子树”。右图为返回的答案。示例2:输入: [1,0...原创 2018-08-26 17:19:43 · 411 阅读 · 0 评论