![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
阿玮d博客
佛系博主 随缘更新
展开
-
LeetCode #5 最长回文子串 动态规划
LeetCode #5 最长回文子串题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"方法一:暴力法遍历每一个子串,首尾一起往中间靠时间复杂度:O(n3)O(n^3)O(n3)空间复杂度:...原创 2020-04-06 14:21:17 · 145 阅读 · 0 评论 -
LeetCode #127 单词接龙 BFS 双向BFS
LeetCode #127 单词接龙题目描述给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的...原创 2020-04-04 15:26:37 · 227 阅读 · 0 评论 -
LeetCode #279 完全平方数 动态规划 BFS
LeetCode #279 完全平方数题目描述给定正整数 n,找到若干个完全平方数(比如 ·1, 4, 9, 16, …·)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3 解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.方法一:动态规划初始化长度为 n+1...原创 2020-04-04 13:20:12 · 246 阅读 · 0 评论 -
LeetCode #1091 二进制矩阵中的最短路径 BFS
LeetCode #1091 二进制矩阵中的最短路径题目描述在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1)。一条从左上角到右下角、长度为 k 的畅通路径,由满足下述条件的单元格 C_1, C_2, ..., C_k 组成:相邻单元格 C_i 和 C_{i+1} 在八个方向之一上连通(此时,C_i 和 C_{i+1} 不同且共享边或角)C_1 位于 (0, ...原创 2020-04-04 11:16:15 · 272 阅读 · 0 评论 -
LeetCode #41 接雨水
LeetCode #41 接雨水题目描述给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6...原创 2020-04-04 10:17:44 · 160 阅读 · 0 评论 -
LeetCode #95 不同的二叉搜索树II 分治
LeetCode #95 不同的二叉搜索树II题目描述给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树。示例:输入: 3输出:[ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树: 1...原创 2020-04-02 12:50:28 · 157 阅读 · 0 评论 -
LeetCode #241 为运算表达式设计优先级 分治
LeetCode #241 为运算表达式设计优先级题目描述给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。示例 1:输入: "2-1-1"输出: [0, 2]解释: ((2-1)-1) = 0 (2-(1-1)) = 2示例 2:输入: "2*3-4*5"输出: ...原创 2020-04-02 10:59:45 · 274 阅读 · 1 评论 -
LeetCode #289 生命游戏 位运算
LeetCode #289 生命游戏题目描述根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细胞(live),或 0 即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:如果活细...原创 2020-04-02 09:14:03 · 215 阅读 · 0 评论 -
LeetCode #34 在排序数组中查找元素的第一个和最后一个位置 二分查找
LeetCode #34 在排序数组中查找元素的第一个和最后一个位置题目描述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,...原创 2020-04-01 15:23:42 · 170 阅读 · 0 评论 -
LeetCode #153 寻找旋转排序数组中的最小值 二分查找
LeetCode #153 寻找旋转排序数组中的最小值题目描述假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [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...原创 2020-04-01 14:50:53 · 179 阅读 · 0 评论 -
LeetCode # 278 第一个错误的版本 二分查找
LeetCode # 278 第一个错误的版本题目描述你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version)...原创 2020-04-01 12:48:52 · 368 阅读 · 0 评论 -
LeetCode #540 有序数组中的单一元素 二分查找
LeetCode #540 有序数组中的单一元素题目描述给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。示例 1:输入: [1,1,2,3,3,4,4,8,8]输出: 2示例 2:输入: [3,3,7,7,10,11,11]输出: 10注意: 您的方案应该在 O(log n) 时间复杂度和 O(1) 空间复杂度中运行。思路分析题目规...原创 2020-04-01 12:01:10 · 202 阅读 · 0 评论 -
LeetCode #744 寻找比目标字母大的最小字母 二分查找
LeetCode #744 寻找比目标字母大的最小字母题目描述给定一个只包含小写字母的有序数组 letters 和一个目标字母 target,寻找有序数组里面比目标字母大的最小字母。在比较时,数组里字母的是循环有序的。举个例子:如果目标字母 target = 'z' 并且有序数组为 letters = ['a', 'b'],则答案返回 'a'。如果目标字母 target = 'n' 并...原创 2020-04-01 11:37:14 · 174 阅读 · 0 评论 -
LeetCode #69 x的平方根 二分查找
LeetCode #69 x的平方根题目描述实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。方法一:二分查找...原创 2020-04-01 10:48:44 · 400 阅读 · 0 评论 -
LeetCode #1111 有效括号的嵌套深度 栈
先看另一道题目LeetCode #20 有效的括号题目描述给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 ...原创 2020-04-01 09:18:25 · 156 阅读 · 0 评论 -
LeetCode #121 买卖股票的最佳时机 贪心 单调栈 动态规划
LeetCode #121 买卖股票的最佳时机题目描述给定一个数组,它的第 iii 个元素是一支给定股票第 iii 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价...原创 2020-03-31 13:36:52 · 499 阅读 · 0 评论 -
LeetCode #406 根据身高重建队列 贪心
LeetCode #406 根据身高重建队列题目描述假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对 (h, k) 表示,其中h是这个人的身高,k 是排在这个人前面且身高大于或等于 h 的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7...原创 2020-03-31 12:00:34 · 180 阅读 · 0 评论 -
LeetCode #452 用最少数量的箭引爆气球 贪心 动态规划
LeetCode #452 用最少数量的箭引爆气球题目描述在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 x[st...原创 2020-03-31 11:21:51 · 233 阅读 · 0 评论 -
LeetCode #435 无重叠区间 贪心 动态规划
LeetCode #435 无重叠区间题目描述给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 ...原创 2020-03-31 10:42:41 · 459 阅读 · 0 评论 -
LeetCode #455 分发饼干 贪心思想
LeetCode #455 分发饼干题目描述假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最...原创 2020-03-31 09:46:29 · 288 阅读 · 0 评论 -
LeetCode #912 排序数组 快速排序 堆排序 归并排序
LeetCode #912 排序数组题目描述给定一个整数数组 nums,将该数组升序排列。示例 1:输入:[5,2,3,1]输出:[1,2,3,5]示例 2:输入:[5,1,1,2,0,0]输出:[0,0,1,1,2,5]提示:1 <= A.length <= 10000-50000 <= A[i] <= 50000方法一:简易快排方法一:...原创 2020-03-31 09:18:36 · 221 阅读 · 0 评论 -
LeetCode #75 颜色分类 三向切分快速排序
LeetCode #75 颜色分类题目描述给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解...原创 2020-03-31 00:34:22 · 170 阅读 · 0 评论 -
LeetCode #451 根据字符出现频率排序 堆排序 桶排序
LeetCode #451 根据字符出现频率排序题目描述给定一个字符串,请将字符串里的字符按照出现的频率降序排列。示例 1:输入:"tree"输出:"eert"解释:'e'出现两次,'r'和't'都只出现一次。因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。示例 2:输入:"cccaaa"输出:"cccaaa"解释:'c'和...原创 2020-03-30 22:28:07 · 229 阅读 · 0 评论 -
LeetCode #347 前K个高频元素 堆排序 桶排序
LeetCode #347 前K个高频元素题目描述给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]说明:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必...原创 2020-03-30 21:28:20 · 161 阅读 · 0 评论 -
LeetCode #215 数组中的第K个最大元素 快速排序 快速选择 堆排序
LeetCode #215 数组中的第K个最大元素题目描述在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ...原创 2020-03-30 16:56:21 · 273 阅读 · 0 评论 -
LeetCode #面试题62 圆圈中最后剩下的数字
LeetCode #面试题62 圆圈中最后剩下的数字题目描述0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例 1:输入: n = 5, m = 3输出: 3示例 2:...原创 2020-03-30 08:42:36 · 194 阅读 · 0 评论 -
LeetCode #524 通过删除字母匹配到字典里最长单词 双指针
LeetCode #524 通过删除字母匹配到字典里最长单词题目描述给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。示例 1:输入:s = "abpcplea", d = ["ale","apple","monkey","plea"]输出: ...原创 2020-03-29 16:09:05 · 166 阅读 · 0 评论 -
LeetCode #141 环形链表 双指针
LeetCode # 141 环形链表题目描述给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head ...原创 2020-03-29 15:36:19 · 139 阅读 · 0 评论 -
LeetCode #88 合并两个有序数组 双指针
LeetCode #88 合并两个有序数组题目描述给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [...原创 2020-03-29 15:15:54 · 97 阅读 · 0 评论 -
LeetCode #680 验证回文字符串II 双指针
LeetCode #680 验证回文字符串II题目描述给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: "aba"输出: True示例 2:输入: "abca"输出: True解释: 你可以删除c字符。注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。思路分析双指针,本体的关键是允许删除一个字符,当出现两个指针...原创 2020-03-29 14:51:01 · 133 阅读 · 0 评论 -
LeetCode #345 反转字符串中的元音字母 双指针
LeetCode #345 反转字符串中的元音字母题目描述编写一个函数,以字符串作为输入,反转该字符串中的元音字母。示例 1:输入: "hello"输出: "holle"示例 2:输入: "leetcode"输出: "leotcede"说明:元音字母不包含字母"y"。思路分析使用双指针,双向收缩,当两个指针都遍历到元音字符的时候交换。为了快速判断一个字符是不是元音字符,...原创 2020-03-29 14:25:56 · 120 阅读 · 0 评论 -
LeetCode #633 平方数之和 双指针
LeetCode #633 平方数之和题目描述给定一个非负整数 ccc ,你要判断是否存在两个整数 aaa 和 bbb,使得 a2+b2=ca^2 + b^2 = ca2+b2=c。示例1:输入: 5输出: True解释: 1 * 1 + 2 * 2 = 5示例2:输入: 3输出: False思路分析思路跟 LeetCode #167 两数之和II - 输入有序数组 双指...原创 2020-03-29 14:02:50 · 144 阅读 · 0 评论 -
LeetCode #167 两数之和II - 输入有序数组 双指针
LeetCode #167 两数之和II - 输入有序数组题目描述给定一个已按照 升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示...原创 2020-03-29 12:41:26 · 160 阅读 · 0 评论 -
LeetCode #1162 地图分析 多源BFS 动态规划
LeetCode #1162 地图分析题目描述你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地,你知道距离陆地区域最远的海洋区域是是哪一个吗?请返回该海洋区域到离它最近的陆地区域的距离。我们这里说的距离是『曼哈顿距离』( Manhattan Distance):(x0, y0) 和 (x...原创 2020-03-29 11:19:03 · 240 阅读 · 0 评论 -
LeetCode #820 单词的压缩编码 字符串 字典树
LeetCode #820 单词的压缩编码题目描述给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。例如,如果这个列表是 ["time", "me", "bell"],我们就可以将其表示为 S = "time#bell#" 和 indexes = [0, 2, 5]。对于每一个索引,我们可以通过从字符串 S 中索引的位置开始读取字符串,直到 “#” 结束,来恢复...原创 2020-03-28 13:22:45 · 256 阅读 · 0 评论 -
LeetCode #914 卡牌分组 数组
LeetCode #914 卡牌分组题目描述给定一副牌,每张牌上都写着一个整数。此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:每组都有 X 张牌。组内所有的牌上都写着相同的整数。仅当你可选的 X >= 2 时返回 true。示例 1:输入:[1,2,3,4,4,3,2,1]输出:true解释:可行的分组是 [1,1],[2,2],[3...原创 2020-03-27 08:55:42 · 127 阅读 · 0 评论 -
LeetCode #437 路径总和III 树 递归
LeetCode #437路径总和III题目描述给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,...原创 2020-03-26 11:12:10 · 112 阅读 · 0 评论 -
LeetCode #112 路径总和 树 递归
LeetCode #112 路径总和 树题目描述给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 ...原创 2020-03-26 09:59:21 · 124 阅读 · 0 评论 -
LeetCode #999 车的可用捕获量 方向数组
LeetCode #999 车的可用捕获量题目描述在一个 8 x 8 的棋盘上,有一个白色车(rook)。也可能有空方块,白色的象(bishop)和黑色的卒(pawn)。它们分别以字符 “R”,“.”,“B” 和 “p” 给出。大写字符表示白棋,小写字符表示黑棋。车按国际象棋中的规则移动:它选择四个基本方向中的一个(北,东,西和南),然后朝那个方向移动,直到它选择停止、到达棋盘的边缘或移动到...原创 2020-03-26 09:04:42 · 111 阅读 · 0 评论 -
LeetCode #617 合并二叉树 树 递归
LeetCode #617 合并二叉树题目描述给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则 不为 NULL 的节点将直接作为新二叉树的节点。示例 1:输入: Tree 1 Tree 2 ...原创 2020-03-25 12:36:26 · 118 阅读 · 0 评论