LeetCode
LeetCode刷题之路。
博_采_众_长
理论与实践并行!
展开
-
LintCode 18.子集 II
文章目录描述思路题解描述给定一个可能具有重复数字的列表,返回其所有可能的子集。样例样例 1:输入:[0]输出:[ [], [0]]样例 2:输入:[1,2,2]输出:[ [2], [1], [1,2,2], [2,2], [1,2], []]挑战你可以同时用递归与非递归的方式解决么?注意事项子集中的每个元素都是非降序的两个子集间的顺序是无关紧要的解集中不能包含重复子集思路题解...原创 2020-12-19 16:06:32 · 127 阅读 · 3 评论 -
LintCode 17.子集
文章目录描述思路题解描述给定一个含不同整数的集合,返回其所有的子集。样例样例 1:输入:[0]输出:[ [], [0]]样例 2:输入:[1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]挑战你可以同时用递归与非递归的方式解决么?注意事项子集中的元素排列必须是非降序的,解集必须不包含重复的子集。思路采用递归的方法,将数组从小到大排好序,每次执行subsets原创 2020-12-19 15:44:19 · 163 阅读 · 1 评论 -
LeetCode 1002. 查找常用字符(数组Hash)
1.题目给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。你可以按任意顺序返回答案。示例 1:输入:["bella","label","roller"]输出:["e","l","l"]示例 2:输入:["cool","lock","cook"]输出:["c","o"] 提示:1 <= A.length <= 10原创 2020-10-14 09:00:07 · 91 阅读 · 0 评论 -
LeetCode 1. 两数之和(一遍Hash)
1.题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/two-sum著作原创 2020-10-13 21:05:18 · 146 阅读 · 2 评论 -
LeetCode 3. 无重复字符的最长子串(数组Hash或set)
1.题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串...原创 2020-05-02 08:38:41 · 241 阅读 · 0 评论 -
LeetCode 5. 最长回文子串(中心扩展算法)
1.题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic-substring/著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2.题解中心扩展算法原创 2020-05-21 08:11:23 · 176 阅读 · 0 评论 -
LeetCode 21. 合并两个有序链表(迭代+递归)
1.题目将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/...原创 2020-05-01 07:53:20 · 184 阅读 · 0 评论 -
LeetCode 23. 合并K个排序链表(顺序+分治+优先队列)
1.题目合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/m...原创 2020-04-26 08:34:23 · 152 阅读 · 0 评论 -
LeetCode 25. K 个一组翻转链表(递归+模拟)
1.题目给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5 说明:你的算法只能使用常数的额外空间。你不能只是单纯的改原创 2020-05-16 21:33:23 · 239 阅读 · 0 评论 -
LeetCode 33. 搜索旋转排序数组(二分法)
1.题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2]...原创 2020-04-27 09:27:38 · 123 阅读 · 0 评论 -
LeetCode 45. 跳跃游戏 II (贪心+动态规划)
1.题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。说明:假设你总是可以到达数组...原创 2020-05-04 08:39:38 · 344 阅读 · 0 评论 -
LeetCode 46. 全排列(非递归+回溯)
1.题目给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/permutations著作权归领扣网络所...原创 2020-04-25 10:15:39 · 228 阅读 · 0 评论 -
LeetCode 50. Pow(x, n) (快速幂 递归+迭代)
1.题目实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 < x < 100.0n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。来源:力扣(LeetCode)原创 2020-05-11 08:41:54 · 250 阅读 · 0 评论 -
LeetCode 53. 最大子序和(贪心+动态规划+分治)
1.题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。来源:力扣(LeetCode)链接:https://l...原创 2020-05-03 10:27:47 · 261 阅读 · 2 评论 -
LeetCode 55. 跳跃游戏(贪心)
1.题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎...原创 2020-04-17 12:05:55 · 149 阅读 · 2 评论 -
LeetCode 69. x 的平方根(二分+牛顿迭代)
1,题目实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sqrtx著作权归领扣网络所有。商业转载请联系官方授权,非原创 2020-05-09 07:58:42 · 134 阅读 · 0 评论 -
LeetCode 74. 搜索二维矩阵(二分法)
1.题目编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]target = 3输出: true示例 2:...原创 2020-04-24 09:04:34 · 139 阅读 · 0 评论 -
LeetCode 81. 搜索旋转排序数组 II(去重+二分法)
1.题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。示例 1:输入: nums = [2,5,6,0,0,1,2], target = 0输出: true示例 2:输入: nums =...原创 2020-04-27 09:45:50 · 134 阅读 · 0 评论 -
LeetCode 84. 柱状图中最大的矩形(单调栈)
1.题目给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。示例:输入: [2,1,5,6,2,3]输出: 10来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/largest-rectangle-i原创 2020-05-30 15:45:10 · 210 阅读 · 0 评论 -
LeetCode 101. 对称二叉树(递归+迭代)
1.题目给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3 进阶:你可以运用递归和迭代两种方法解决这个问题吗?来源:力扣(LeetCode)链接:https://leetcode-cn.com/p原创 2020-05-31 21:52:53 · 228 阅读 · 0 评论 -
LeetCode 102. 二叉树的层序遍历(DFS+BFS)
1.题目给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal原创 2020-05-13 07:35:27 · 245 阅读 · 0 评论 -
LeetCode 103. 二叉树的锯齿形层次遍历(双端队列+BFS)
1.题目给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[ [3], [20,9], [15,7]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-zigz原创 2020-05-13 23:16:53 · 141 阅读 · 0 评论 -
LeetCode 105. 从前序与中序遍历序列构造二叉树(递归)
1.题目根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-an原创 2020-05-22 13:26:42 · 202 阅读 · 0 评论 -
LeetCode 107. 二叉树的层次遍历 II(倒装+逆序)
1.题目给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层次遍历为:[ [15,7], [9,20], [3]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-level-or原创 2020-05-13 10:11:41 · 278 阅读 · 0 评论 -
LeetCode 119. 杨辉三角 II O(k) 空间复杂度
1.题目给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 3输出: [1,3,3,1]进阶:你可以优化你的算法到 O(k) 空间复杂度吗?2.题解建立对应长度的vector,每次从上一层计算下一层。class Solution{public: vector<int> ...原创 2020-04-24 18:50:27 · 147 阅读 · 0 评论 -
LeetCode 125. 验证回文串(双指针)
1.题目给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-palindrome著作权归领扣网络所有。商业转载请联系官方授权,非商业转原创 2020-05-19 06:54:53 · 141 阅读 · 0 评论 -
LeetCode 128. 最长连续序列(Hash)
1.题目给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-consecutive-sequence/著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2.题解思路:一见到时间复杂度原创 2020-06-06 21:02:38 · 186 阅读 · 0 评论 -
LeetCode 136. 只出现一次的数字(位运算+哈希)
1.题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems...原创 2020-05-02 09:21:34 · 133 阅读 · 0 评论 -
LeetCode 137. 只出现一次的数字 II (逐位考虑+位运算)
1.题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,3,2]输出: 3示例 2:输入: [0,1,0,1,0,1,99]输出: 99来源:力扣(LeetCode)链接:https://leetcode-cn.com...原创 2020-05-02 10:33:30 · 139 阅读 · 0 评论 -
LeetCode 151. 翻转字符串里的单词(双指针+API)
1.题目给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: "the sky is blue"输出: "blue is sky the"示例 2:输入: " hello world! "输出: "world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: "a good example"输出: "example good a"解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。原创 2020-07-29 10:10:40 · 164 阅读 · 0 评论 -
LeetCode 152. 乘积最大子数组(在线处理+动态规划)
1.题目给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-product-subarray原创 2020-05-18 20:07:55 · 224 阅读 · 0 评论 -
LeetCode 153. 寻找旋转排序数组中的最小值(二分法)
1.题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。示例 1:输入: [3,4,5,1,2]输出: 1示例 2:输入: [4,5,6,7,0,1,2]输出: 0来源:力扣(LeetCode)链接:https://...原创 2020-04-27 13:29:21 · 103 阅读 · 0 评论 -
LeetCode 154. 寻找旋转排序数组中的最小值 II(去重+二分法)
1.题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。注意数组中可能存在重复的元素。示例 1:输入: [1,3,5]输出: 1示例 2:输入: [2,2,2,0,1]输出: 0说明:这道题是 寻找旋转排序数组中的最小值 的延伸题目。允许重复会影...原创 2020-04-27 14:26:17 · 108 阅读 · 0 评论 -
LeetCode 155. 最小栈(双栈)
1.题目设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,null,null,-原创 2020-05-12 18:28:22 · 138 阅读 · 0 评论 -
LeetCode 198. 打家劫舍(动态规划+滚动数组)
1.题目你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。示例 2原创 2020-05-29 16:29:58 · 168 阅读 · 0 评论 -
LeetCode 199. 二叉树的右视图(dfs或bfs)
1.题目给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释: 1 <--- / \2 3 <--- \ \ 5 4 <---来源:力扣(Lee...原创 2020-04-22 08:36:05 · 130 阅读 · 0 评论 -
LeetCode 202. 快乐数(HashSet或双指针)
1.题目编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例:输入:19输出:true解释:12 + 92 = 8282...原创 2020-04-30 17:22:33 · 180 阅读 · 0 评论 -
LeetCode 210. 课程表 II(Kahn)
1.题目现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。示例 1:输入: 2, [[1,0]] 输出: [0,1]解释: 总共有 2 门课程。要学习课程 1,你需要先完成课程 0。因此,正确的课程顺序为原创 2020-05-17 09:01:49 · 153 阅读 · 0 评论 -
LeetCode 221. 最大正方形(动态规划)
1.题目在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximal-square/著作权归领扣网络所有。商业转载请联系官方授权,非商...原创 2020-05-08 19:56:11 · 216 阅读 · 0 评论 -
LeetCode 260. 只出现一次的数字 III(异或运算)
1.题目给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。示例 :输入: [1,2,1,3,2,5]输出: [3,5]注意:结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?来源:力扣(LeetCode)链接:https://...原创 2020-05-04 16:21:16 · 162 阅读 · 0 评论