leetcode题解
文章平均质量分 60
本栏目会收录本人在刷题过程中的leetcode详细解答,带有个人对题目的感想,理解等等。代码用c++编写,程序都在leetcode官网上通过了的。
农民小飞侠
如果放弃了,那还谈什么理想
展开
-
[leetcode] K 和数对的最大数目
给你一个整数数组 nums 和一个整数 k。每一步操作中,你需要从数组中选出和为 k 的两个整数,并将它们移出数组。返回你可以对数组执行的最大操作数。原创 2024-04-23 08:58:46 · 75 阅读 · 0 评论 -
[leetcode] 1071. 字符串的最大公因子
对于字符串 s 和 t,只有在 s = t + t + t + … + t + t(t 自身连接 1 次或多次)时,我们才认定 “t 能除尽 s”。给定两个字符串 str1 和 str2。返回 最长字符串 x,要求满足 x 能除尽 str1 且 x 能除尽 str2。原创 2024-04-22 22:36:12 · 132 阅读 · 0 评论 -
[leetcode] 1768. 交替合并字符串
给你两个字符串 word1 和 word2。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。返回 合并后的字符串。原创 2024-04-22 22:26:57 · 83 阅读 · 0 评论 -
[leetcode] 2 的幂
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true;否则,返回 false。如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。进阶:你能够不使用循环/递归解决此问题吗?原创 2024-04-21 18:39:17 · 144 阅读 · 0 评论 -
[leetcode] 264. 丑数 II
给你一个整数 n ,请你找出并返回第 n 个 丑数。丑数 就是质因子只包含 2、3 和 5 的正整数。原创 2024-04-21 17:50:08 · 114 阅读 · 0 评论 -
[leetcode] 235. 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]原创 2024-04-21 16:12:11 · 192 阅读 · 0 评论 -
[leetcode] 946. 验证栈序列
给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false。原创 2024-04-21 11:17:09 · 168 阅读 · 0 评论 -
[leetcode] 796. 旋转字符串
给定两个字符串, s 和 goal。如果在若干次旋转操作之后,s 能变成 goal ,那么返回 true。s 的 旋转操作 就是将 s 最左边的字符移动到最右边。原创 2024-04-21 11:07:10 · 224 阅读 · 1 评论 -
[leetcode] 232. 用栈实现队列
请你仅使用两个栈实现先入先出队列。原创 2024-04-21 09:52:21 · 287 阅读 · 0 评论 -
[leetcode] 433. 最小基因变化
基因序列可以表示为一条由 8 个字符组成的字符串,其中每个字符都是 ‘A’、‘C’、‘G’ 和 ‘T’ 之一。假设我们需要调查从基因序列 start 变为 end 所发生的基因变化。一次基因变化就意味着这个基因序列中的一个字符发生了变化。另有一个基因库 bank 记录了所有有效的基因变化,只有基因库中的基因才是有效的基因序列。(变化后的基因必须位于基因库 bank 中)原创 2024-04-14 15:11:38 · 270 阅读 · 0 评论 -
[leetcode] 427. 建立四叉树
给你一个 n * n 矩阵 grid ,矩阵由若干 0 和 1 组成。请你用四叉树表示该矩阵 grid。你需要返回能表示矩阵 grid 的 四叉树 的根结点。四叉树数据结构中,每个内部节点只有四个子节点。此外,每个节点都有两个属性:val:储存叶子结点所代表的区域的值。1 对应 True,0 对应 False。注意,当 isLeaf 为 False 时,你可以把 True 或者 False 赋值给节点,两种值都会被判题机制 接受。原创 2024-04-13 17:19:44 · 421 阅读 · 0 评论 -
[leetcode] 164. 最大间距
给定一个无序的数组 nums,返回 数组在排序之后,相邻元素之间最大的差值。如果数组元素个数小于 2,则返回 0。您必须编写一个在「线性时间」内运行并使用「线性额外空间」的算法。原创 2024-04-10 09:04:49 · 201 阅读 · 0 评论 -
[leetcode] 110. 平衡二叉树
给定一个二叉树,判断它是否是平衡二叉树。原创 2024-04-08 23:56:29 · 190 阅读 · 1 评论 -
[leetcode] 25. K 个一组翻转链表
给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。示例 1进阶:你可以设计一个只用 O(1) 额外内存空间的算法解决此问题吗?原创 2024-04-06 16:42:13 · 596 阅读 · 0 评论 -
[leetcode] 191. 位1的个数
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中设置位的个数(也被称为汉明重量)。原创 2024-04-05 16:11:54 · 228 阅读 · 0 评论 -
[leetcode] 190. 颠倒二进制位
颠倒给定的 32 位无符号整数的二进制位。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在 示例 2 中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825。进阶: 如果多次调用这个函数,你将如何优化你的算法?原创 2024-04-05 16:08:26 · 179 阅读 · 0 评论 -
[leetcode] 66. 加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。原创 2024-04-05 14:31:39 · 250 阅读 · 0 评论 -
[leetcode] 637. 二叉树的层平均值
给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。原创 2024-04-01 19:09:25 · 405 阅读 · 0 评论 -
[leetcode] 100. 相同的树
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。原创 2024-03-31 18:15:51 · 272 阅读 · 1 评论 -
[leetcode] 61. 旋转链表
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。原创 2024-03-31 17:50:27 · 366 阅读 · 0 评论 -
[leetcode] 20. 有效的括号
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。原创 2024-03-31 15:57:53 · 329 阅读 · 0 评论 -
[leetcode] 228. 汇总区间
给定一个 无重复元素 的 有序 整数数组 nums。返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x。原创 2024-03-30 17:45:25 · 407 阅读 · 0 评论 -
[leetcode] 290. 单词规律
给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。原创 2024-03-30 16:07:09 · 184 阅读 · 0 评论 -
[leetcode] 12. 整数转罗马数字
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II。27 写做 XXVII, 即为 XX + V + II。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。同样地,数字 9 表示为 IX。原创 2024-03-28 09:21:21 · 306 阅读 · 0 评论 -
[leetcode] 26. 删除有序数组中的重复项
给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致。然后返回 nums 中唯一元素的个数。系统会用下面的代码来测试你的题解:// 输入数组// 长度正确的期望答案// 调用i < k;i++) {如果所有断言都通过,那么您的题解将被 通过。原创 2024-03-24 23:36:27 · 372 阅读 · 0 评论 -
[leetcode] 994. 腐烂的橘子
每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。返回 直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。原创 2024-03-24 19:57:21 · 212 阅读 · 0 评论 -
[leetcode] 240. 搜索二维矩阵 II
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。原创 2024-03-24 18:36:59 · 372 阅读 · 0 评论 -
[leetcode] 189. 轮转数组
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。原创 2024-03-24 16:46:35 · 271 阅读 · 0 评论 -
[leetcode] 138. 随机链表的复制
给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点。例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y。原创 2024-03-24 11:12:16 · 361 阅读 · 0 评论 -
[leetcode] 21. 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。思路很直接,就是两个链表按照顺序进行拼接。原创 2024-03-21 09:31:25 · 240 阅读 · 0 评论 -
[leetcode] 141. 环形链表
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递。仅仅是为了标识链表的实际情况。这是一个经典的题目,慢指针一次跳1步,快指针一次跳2步,如果有环,则它们会在某个节点相遇,这样就很好判断了。如果链表中存在环 ,则返回 true。否则,返回 false。给你一个链表的头节点 head ,判断链表中是否有环。原创 2024-03-21 09:06:55 · 226 阅读 · 0 评论 -
[leetcode] 206. 反转链表
进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。原创 2024-03-20 09:18:22 · 262 阅读 · 0 评论 -
[leetcode] 104. 二叉树的最大深度
给定一个二叉树 root ,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。原创 2024-03-17 09:39:24 · 253 阅读 · 0 评论 -
[leetcode] 283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。进阶:你能尽量减少完成的操作次数吗?原创 2024-03-05 23:43:41 · 214 阅读 · 0 评论 -
[leetcode] 518. 零钱兑换ii
目标数为背包容量,硬币数值代表物品容量,但是这里求的是方法数,并不是求的价值,同一个硬币可以使用无数次。给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0。题目数据保证结果符合 32 位带符号整数。最终的返回值就是dp[amount]了。假设每一种面额的硬币有无限个。原创 2023-07-18 09:27:54 · 367 阅读 · 0 评论 -
[leetcode] 48 旋转图像
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。进行一次主对角线翻转和竖直翻转就行了。原创 2023-02-21 14:10:52 · 84 阅读 · 0 评论 -
[leetcode] 35. 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。原创 2023-02-21 08:35:20 · 111 阅读 · 0 评论 -
[leetcode] 34 在排序数组中查找元素的第一个和最后一个位置
这道题可以用常规的二分法写出来,但要注意下重复的情况,我是在找到一个target之后,向左向右进行拓展得到重复的边界的,稍微有点暴力。给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。如果数组中不存在目标值 target,返回 [-1, -1]。原创 2023-02-21 08:26:36 · 195 阅读 · 0 评论 -
[leetcode] 26. 删除有序数组中的重复项
由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。将最终结果插入 nums 的前 k 个位置后返回 k。如果所有断言都通过,那么您的题解将被 通过。原创 2023-02-20 02:34:50 · 127 阅读 · 0 评论 -
[leetcode] 13 罗马数字转整数
罗马数字转整数:这个算法用字典,然后根据字典进行解析就行了。原创 2023-02-19 22:36:23 · 298 阅读 · 0 评论