Leetcode
文章平均质量分 65
会流泪de鱼
这个作者很懒,什么都没留下…
展开
-
Leetcode101. 对称二叉树
Leetcode101. 对称二叉树题目:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。题解:方法一:递归如果一个树的左子树与右子树镜像对称,那么这个树是对称的。scala代码如下:def isSymmetric(root: TreeNode): Boolean = { isMirror(root, root) }......原创 2019-12-30 16:22:34 · 134 阅读 · 0 评论 -
eetcode704. 二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。原创 2023-02-23 09:48:48 · 192 阅读 · 0 评论 -
Leetcode739. 每日温度
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。由于单调栈满足从栈底到栈顶元素对应的温度递减,因此每次有元素进栈时,会将温度更低的元素全部移除,并更新出栈元素对应的等待天数,这样可以确保等待天数一定是最小的。可以维护一个存储下标的单调栈,从栈底到栈顶的下标对应的温度列表中的温度依次递减。,按照以下步骤更新单调栈和答案,其中单调栈内的元素都是下标,括号内的数字表示下标在温度列表中对应的温度。原创 2022-09-05 15:51:37 · 545 阅读 · 0 评论 -
Leetcode647. 回文子串
在实现的时候,我们需要处理一个问题,即如何有序地枚举所有可能的回文中心,我们需要考虑回文长度是奇数和回文长度是偶数的两种情况。当然你可以做两次循环来分别枚举奇数长度和偶数长度的回文,但是我们也可以用一个循环搞定。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。,就可以得到所有可能的回文中心,这样就把奇数长度和偶数长度两种情况统一起来了。的时间检测当前的子串是否是回文,整个算法的时间复杂度是。子字符串 是字符串中的由连续字符组成的一个序列。的,对于每个回文中心拓展的次数也是。原创 2022-09-05 14:48:28 · 247 阅读 · 0 评论 -
Leetcode581. 最短无序连续子数组
给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。进行排序,整个数组将变为有序。换而言之,当我们对整个序列进行排序,在实际代码中,我们可以在一次循环中同时完成左右边界的计算。请你找出符合题意的 最短 子数组,并输出它的长度。当我们计算完成左右边界,即可返回。表示为三段子数组拼接的形式,分别记作。这样最后一个使得不等式不成立的。同理,我们可以用类似的方法确定。中任意一个数都大于等于。我们可以从大到小枚举。特别地,我们需要特判。原创 2022-09-02 10:46:41 · 235 阅读 · 0 评论 -
Leetcode560. 和为 K 的子数组
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数。的计算只与前一项的答案有关,因此我们可以不用建立。的连续子数组个数时只要统计有多少个前缀和为。简单移项可得符合条件的下标。,以和为键,出现次数为对应的。】这个条件我们可以转化为。...原创 2022-09-01 16:42:59 · 199 阅读 · 0 评论 -
Leetcode543. 二叉树的直径
如图我们可以知道路径 [9, 4, 2, 5, 7, 8] 可以被看作以 2 为起点,从其左儿子向下遍历的路径 [2, 4, 9] 和从其右儿子向下遍历的路径 [2, 5, 7, 8] 拼接得到。,函数返回该节点为根的子树的深度。(即以右儿子为根的子树的深度),那么以该节点为起点的路径经过节点数的最大值即为。(即以左儿子为根的子树的深度) 和其右儿子向下遍历经过最多的节点数。假设我们知道对于该节点的左儿子向下遍历经过最多的节点数。为起点的路径经过节点数的最大值为。,则该节点为根的子树的深度即为。...原创 2022-09-01 14:19:36 · 71 阅读 · 0 评论 -
Leetcode494. 目标和
可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1”。在定义状态之后,需要考虑边界情况。以下两种情况都属于边界情况。,计算选取元素的方案数。我们可以使用动态规划的方法求解。下标范围内选取若干个正整数,使得这些元素之和等于。也必须是非负整数,所以上式成立的前提是。中选取若干元素,使得这些元素之和等于。(i 的计数从 1 开始),遍历。若上式成立,问题转化成在数组。的长度为 n,则最终答案为。的不同 表达式 的数目。中的元素都是非负整数,,得到的表达式的结果为。...原创 2022-08-26 11:20:21 · 155 阅读 · 0 评论 -
Leetcode438. 找到字符串中所有字母异位词
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。中数量不同的字母的个数,并在滑动窗口的过程中维护它。的长度相同的滑动窗口,统计滑动窗口和字符串。中每种字母的数量是否相同时,只需要判断。在判断滑动窗口中每种字母的数量与字符串。的长度相同,所以我们可以在字符串。中每种字母数量的差;的异位词的长度一定与字符串。中构造一个长度为与字符串。来记录当前窗口与字符串。原创 2022-08-25 15:37:19 · 67 阅读 · 0 评论 -
Leetcode416. 分割等和子集
给你一个 只包含正整数 的 非空 数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。下标范围内选取若干个正整数(可以是 0 个),是否存在一种选取方案使得被选取的正整数的和等于。在定义状态之后,需要考虑边界情况。以下两种情况都属于边界情况。,可以选取也可以不选取,两种情况只要有一个为。需要分别考虑以下两种情况。的情况下无法选取当前的数字。,则在选取的数字的和等于。...原创 2022-08-25 10:17:21 · 476 阅读 · 0 评论 -
Leetcode406. 根据身高重建队列
个人造成影响,我们可以采用「插空」的方法,依次给每一个人在当前的队列中选择一个插入的位置。当每个人的身高都不相同时,如果我们将他们按照身高从小到大进行排序,那么就可以很方便地还原出原始的队列了。个位置的空队列,而我们每次将一个人放入队列中时,会将一个「空」位置变成「满」位置,那么当我们放入第。如果我们按照排完序后的顺序,依次将每个人放入队列中,那么当我们放入第。同样地,我们也可以将每个人按照身高从大到小进行排序,处理身高相同的人使用的方法类似,即:按照。个人时,只需要将其插入队列中,使得他的前面恰好有。原创 2022-08-24 10:31:47 · 181 阅读 · 0 评论 -
Leetcode94. 字符串解码
编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。给定一个经过编码的字符串,返回它解码后的字符串。原创 2022-08-23 15:33:44 · 60 阅读 · 0 评论 -
Leetcode347. 前 K 个高频元素
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。首先遍历整个数组,并使用哈希表记录每个数字出现的次数,并形成一个「出现次数数组」。个不同的出现次数(其中 N 为原数组长度),故总的算法复杂度会达到。遍历完成后,堆中的元素就代表了「出现次数数组」中前 kk 大的值。个高频元素,就相当于找出「出现次数数组」的前 kk 大的值。最简单的做法是给「出现次数数组」排序。,不满足题目的要求。原创 2022-08-23 10:14:21 · 103 阅读 · 0 评论 -
Leetcode338. 比特位计数
给你一个整数 n ,对于 0原创 2022-08-17 17:06:57 · 363 阅读 · 0 评论 -
Leetcode322. 零钱兑换
计算并返回可以凑成总金额所需的 最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。转移过来,再算上枚举的这枚硬币数量 1 的贡献,由于要硬币数量最少,所以。为前面能转移过来的状态的最小值加上枚举的硬币数量 1。枚硬币的面值,即我们枚举最后一枚硬币面额是。我们采用自下而上的方式进行思考。你可以认为每种硬币的数量是无限的。所需最少的硬币数量,假设在计算。之前,我们已经计算出。...原创 2022-08-17 15:02:54 · 166 阅读 · 0 评论 -
Leetcode312. 戳气球
现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] * nums[i] * nums[i + 1] 枚硬币。这里的 i - 1 和 i + 1 代表和 i 相邻的两个气球的序号。如果 i - 1或 i + 1 超出了数组的边界,那么就当它是一个数字为 1 的气球。有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。能得到的最多硬币数,那么边界条件是。实现时要注意到动态规划的次序。求所能获得硬币的最大数量。...原创 2022-08-17 11:27:57 · 73 阅读 · 0 评论 -
Leetcode309. 最佳买卖股票时机含冷冻期
注意到第 0 天实际上是不存在处于冷冻期的情况的,但我们仍然可以将对应的状态。天)结束之后,手上仍然持有股票,那么显然是没有任何意义的。天结束之后不持有任何股票并且不处于冷冻期,说明当天没有进行任何操作,即第。天时,我们可以在不违反规则的前提下进行「买入」或者「卖出」操作,此时第。在第 0天时,如果持有股票,那么只能是在第 0 天买入的,对应负收益。天结束之后处于冷冻期的原因是在当天卖出了股票,那么说明在第。天时不持有任何股票:如果处于冷冻期,对应的状态为。天时我们必须持有一支股票,对应的状态为。.....原创 2022-08-16 11:17:29 · 242 阅读 · 0 评论 -
Leetcode300. 最长递增子序列
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。个数字结尾的最长上升子序列的长度,注意。结尾的最长上升子序列,所以如果能从。最后,整个数组的最长上升子序列即所有。中最长的上升子序列后面再加一个。后面以形成更长的上升子序列。之前,我们已经计算出。这个状态转移过来,那么。方案二:贪心+二分法。...原创 2022-08-15 21:14:54 · 124 阅读 · 0 评论 -
Leetcode287. 寻找重复数
同样的,我们从下标为 0 出发,根据 f(n)f(n) 计算出一个值,以这个值为新的下标,再用这个函数计算,以此类推产生一个类似链表一样的序列。如果数组中有重复的数,以数组 [1,3,4,2,2] 为例,我们将数组下标 n 和数 nums[n] 建立一个映射关系 f(n)f(n),如果数组中没有重复的数,以数组 [1,3,4,2]为例,我们将数组下标 n 和数 nums[n] 建立一个映射关系 f(n)f(n),从理论上讲,数组中如果有重复的数,那么就会产生多对一的映射,这样,形成的链表就一定会有环路了,.原创 2022-08-15 17:28:46 · 90 阅读 · 0 评论 -
Leetcode279. 完全平方数
完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。给你一个整数 n ,返回 和为 n 的完全平方数的最少数量。...原创 2022-08-12 11:52:14 · 224 阅读 · 0 评论 -
Leetcode240. 搜索二维矩阵 II
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。在搜索的过程中,如果我们超出了矩阵的边界,那么说明矩阵中不存在。在每一步的搜索过程中,如果我们位于位置。为右上角的矩阵中进行搜索,即行的范围为。每行的元素从左到右升序排列。每列的元素从上到下升序排列。的左下角为左下角、以。...原创 2022-08-12 10:38:54 · 120 阅读 · 0 评论 -
Leetcode239. 滑动窗口最大值
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值。原创 2022-08-11 18:13:09 · 195 阅读 · 0 评论 -
Leetcode238. 除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。请不要使用除法,且在 O(n) 时间复杂度内完成此题。...原创 2022-08-11 16:18:19 · 77 阅读 · 0 评论 -
Leetcode221. 最大正方形
可以使用动态规划降低时间复杂度。我们用 \textit{dp}(i, j)dp(i,j) 表示以 (i, j)(i,j) 为右下角,且只包含 11 的正方形的边长最大值。如果我们能计算出所有 \textit{dp}(i, j)dp(i,j) 的值,那么其中的最大值即为矩阵中只包含 11 的正方形的边长最大值,其平方即为最大正方形的面积。在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。为右下角的最大正方形的边长只能是 1,因此。此外,还需要考虑边界条件。....原创 2022-08-09 15:24:04 · 73 阅读 · 0 评论 -
Leetcode215. 数组中的第K个最大元素
因此我们可以改进快速排序算法来解决这个问题:在分解的过程当中,我们会对子数组进行划分,如果划分得到的。我们知道快速排序的性能和「划分」出的子数组的长度密切相关。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。作为主元,调整子数组的元素使得左边的元素都小于等于它,右边的元素都大于等于它,由此可以发现每次经过「划分」操作后,我们一定可以确定一个元素的最终位置,即。我们可以引入随机化来加速这个过程,它的时间代价的期望是。的集合中递归,这种情况是最坏的,时间代价是。...原创 2022-08-09 13:01:48 · 40 阅读 · 0 评论 -
Leetcode152. 乘积最大子数组
给你一个整数数组nums,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。来表示以第i个元素结尾的乘积最大子数组的乘积。子数组是数组的连续子序列。...原创 2022-07-31 13:20:31 · 256 阅读 · 0 评论 -
Leetcode139. 单词拆分
对于检查一个字符串是否出现在给定的字符串列表里一般可以考虑哈希表来快速判断,同时也可以做一些简单的剪枝,枚举分割点的时候倒着枚举,如果分割点jj到ii的长度已经大于字典列表里最长的单词的长度,那么就结束枚举,但是需要注意的是下面的代码给出的是不带剪枝的写法。请你判断是否可以利用字典中出现的单词拼接出s。的最后一个单词,看它是否出现在字典中以及除去这部分的字符串是否合法即可。注意不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。是否都合法,如果两个字符串均合法,那么按照定义。...原创 2022-07-31 11:00:26 · 234 阅读 · 0 评论 -
Leetcode128. 最长连续序列
给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为O(n)的算法解决此问题。原创 2022-07-31 10:25:49 · 45 阅读 · 0 评论 -
Leetcode105. 从前序与中序遍历序列构造二叉树
如果index对应的元素恰好等于栈顶节点,那么说明我们在中序遍历中找到了栈顶节点,所以将index增加1并弹出栈顶节点,直到index对应的元素不等于栈顶节点。按照这样的过程,我们弹出的最后一个节点x就是10的双亲节点,这是因为10出现在了x与x在栈中的下一个节点的中序遍历之间,因此10就是x的右儿子。首先我们将根节点3入栈,再初始化index所指向的节点为4,随后对于前序遍历中的每个节点,我们依次判断它是栈顶节点的左儿子,还是栈中某个节点的右儿子。...原创 2022-07-30 11:04:07 · 283 阅读 · 0 评论 -
Leetcode102.二叉树的层序遍历
给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。原创 2022-07-29 11:35:19 · 198 阅读 · 0 评论 -
Leetcode98. 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。二叉搜索树的中序遍历是有序的,运用中序遍历判断。所有左子树和右子树自身必须也是二叉搜索树。节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。...原创 2022-07-29 10:57:26 · 200 阅读 · 0 评论 -
Leetcode85. 最大矩形
在解法一中,我们讨论了将输入拆分成一系列的柱状图。为了计算矩形的最大面积,我们只需要计算每个柱状图中的最大面积,并找到全局最大值。给定一个仅包含0和1、大小为rowsxcols的二维二进制矩阵,找出只包含1的最大矩形,并返回其面积。中的单调栈的做法,将其应用在我们生成的柱状图中。......原创 2022-07-28 14:26:13 · 223 阅读 · 0 评论 -
Leetcode84. 柱状图中最大的矩形
给定n个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为1。输入heights=[2,1,5,6,2,3]求在该柱状图中,能够勾勒出来的矩形的最大面积。解释最大的矩形为图中红色区域,面积为10。解法三单调栈+哨兵。......原创 2022-07-27 11:45:02 · 231 阅读 · 0 评论 -
Leetcode79. 单词搜索
输入board=[[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]],word=“ABCCED”输入board=[[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]],word=“ABCB”输入board=[[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]],word=“SEE”......原创 2022-07-27 09:49:05 · 65 阅读 · 0 评论 -
Leetcode76. 最小覆盖子串
3、每次向右扩展滑动窗口一步,将s[i]加入滑动窗口中,而新加入了s[i],相当于滑动窗口维护的字符数加一,即hs[s[i]]++。首先让i和j指针都指向字符串s开头,然后枚举整个字符串s,枚举过程中,不断增加。区间中满足t字符串的元素的个数,记录相对应字符的总数。对于t中重复字符,我们寻找的子字符串中该字符数量必须不少于t中该字符数量。的数量多于ht哈希表中s[j]的数量,此时我们就需要向右收缩滑动窗口,j++并使。,说明当前新加入的字符s[i]是必需的,且还未到达字符串。...原创 2022-07-25 11:15:36 · 277 阅读 · 0 评论 -
Leetcode42. 接雨水
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:示例 2:java代码:原创 2022-07-11 21:55:03 · 248 阅读 · 0 评论 -
Leetcode39. 组合总和
给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为 target 的不同组合数少于 150 个。示例 1:示例 2:示例 3:回溯算法+剪枝...原创 2022-07-11 18:43:50 · 60 阅读 · 0 评论 -
Leetcode32.最长有效括号
题目:给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例 1:示例 2:示例 3:方案一:动态规划:我们定义 dp[i]dp[i]dp[i] 表示以下标 ii 字符结尾的最长有效括号的长度。我们将 dpdpdp 数组全部初始化为 000 。显然有效的子串一定以‘)’ 结尾,因此我们可以知道以 ‘(’ 结尾的子串对应的 dpdpdp 值必定为 0 ,我们只需要求解 ‘)’ 在 dp 数组中对应位置的值。方案二:使用额外空间栈 具体做法是我们始终原创 2022-07-10 18:08:22 · 148 阅读 · 0 评论 -
Leetcode10. 正则表达式匹配
给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例 1:示例 2:示例 3:动态规划:状态转移方差如下:f[i][j]={if(p[j]̸=′∗′)={f[]i−1[j−1] mathches(s[i],p[j])false otherwiseotherwise={f[i][j−2]orf[i−1][j] mathches(原创 2022-07-07 18:04:44 · 98 阅读 · 0 评论 -
Leetcode 4. 寻找两个正序数组的中位数
Leetcode 4. 寻找两个正序数组的中位数给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。示例 1:```java输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2```示例 2:```java输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ..原创 2022-07-04 21:56:33 · 83 阅读 · 0 评论