- 博客(1265)
- 收藏
- 关注
原创 538. 把二叉搜索树转换为累加树
本题可利用二叉搜索树(BST)的性质:中序遍历(左→根→右)可得到升序序列。若将遍历顺序改为右→根→左,则可得到降序序列。通过降序遍历BST,依次累加节点值,即可将每个节点的值转换为大于或等于该节点值的所有节点值之和。给出二叉搜索树(BST)的根节点,该树的节点值各不相同。请将其转换为累加树(Greater Sum Tree),使每个节点的值等于原树中大于或等于该节点值的所有节点值之和。
2025-05-12 08:35:32
438
原创 537. 复数乘法
本题需要将复数的字符串表示转换为数值形式,进行乘法运算后再转换回字符串。复数乘法可通过分配律展开为。给定两个表示复数的字符串,返回表示它们乘积的字符串。,关键在于正确解析字符串并提取实部和虚部。
2025-05-12 08:34:17
689
原创 536. 从先序遍历还原二叉树
本题主要是根据先序遍历的字符串构建二叉树,关键在于处理括号来确定节点的父子关系,使用栈或者递归的方式来解析先序遍历字符串并构建二叉树节点。,其中包含以字符串表示的二叉树节点值,每个节点值要么是数字,要么是。先序遍历中,左子树节点值总是在右子树节点值之前。,返回二叉树的根节点。
2025-05-12 08:31:49
648
原创 535. TinyURL 的加密与解密
你的加密和解密算法如何设计和运作是没有限制的,你只需要保证一个 URL 可以被加密成一个 TinyURL,并且这个 TinyURL 可以用解密方法恢复成原本的 URL。本题需要设计一个 URL 短链接系统,核心在于实现 URL 与短码之间的双向映射。可以使用哈希表来存储这种映射关系,同时需要一个生成短码的策略来确保短码的唯一性和随机性。TinyURL 是一种 URL 简化服务,比如:当你输入一个 URL。时,它会返回一个简化的 URL。设计一个 TinyURL 的加密。
2025-05-12 08:30:00
477
原创 534. 游戏玩法分析 III
编写一个 SQL 查询,同时报告每个玩家和日期,以及玩家到目前为止玩了多少游戏。也就是说,对于每个玩家和日期,查询玩家到该日期(包括该日期)为止玩了多少游戏。例如,玩家 1 到 2016-05-03 共玩了 5 + 6 + 1 = 12 个游戏。每一行是在某天使用某个设备登出之前登录并玩多个游戏(可能为0)的玩家的记录。玩家 2 到 2016-07-03 共玩了 0 + 5 = 5 个游戏。这个表显示的是某些游戏玩家的游戏活动情况。对于每个玩家,我们只关心玩家的登录日期。返回的结果表没有顺序要求。
2025-05-12 08:27:56
666
原创 533. 孤独像素 II
可以通过预处理记录每行和每列的黑色像素数量,并用哈希表记录每行的内容,从而快速验证条件。,其中每个 ‘B’ 代表黑色像素,‘W’ 代表白色像素。给定一个由字符 ‘B’ 和 ‘W’ 组成的二维网格。如果一个黑色像素 ‘B’ 满足以下两个条件,则称其为。
2025-05-12 08:26:35
265
原创 532. 数组中的 k-diff 数对
本题需要找出数组中满足特定差值的数对,关键在于高效地检查每个数是否存在对应的补数(即与当前数差值为。可使用哈希表来快速记录和查询元素的出现次数,从而优化查找效率。给定一个整数数组和一个整数。,你需要在数组里找到不同的。数对定义为一个整数对。数对,并返回其数目。
2025-05-12 08:24:39
555
原创 531. 孤独像素 I
本题需要统计满足特定条件的黑色像素(孤独像素)的数量。可以通过预处理行和列中黑色像素的数量,然后遍历每个像素,检查其是否满足孤独像素的条件。,其中 ‘B’ 表示黑色像素,‘W’ 表示白色像素。孤独像素被定义为:某个黑色像素 ‘B’ 满足其所在行和列中恰好有一个黑色像素。给定一个表示图像的二维字符数组。返回图像中孤独像素的数量。
2025-05-12 08:22:13
412
原创 530. 二叉搜索树的最小绝对差
本题可利用二叉搜索树(BST)的特性:中序遍历结果为升序序列。在升序序列中,相邻元素的差的绝对值最小,因此通过中序遍历 BST 并比较相邻节点的值即可得到答案。给你一棵所有节点为非负值的二叉搜索树(BST),请你计算树中任意两节点的差的绝对值的最小值。
2025-05-12 08:21:07
431
原创 529. 扫雷游戏
给定一个代表游戏板的二维字符矩阵。‘M’ 代表一个未挖出的地雷,‘E’ 代表一个未挖出的空方块,‘B’ 代表一个已挖出的空白方块,数字(‘1’ 到 ‘8’)表示有多少地雷与这块已挖出的方块相邻,‘X’ 则表示一个已挖出的地雷。本题属于典型的深度优先搜索(DFS)或广度优先搜索(BFS)问题。当点击一个未挖出的空方块(‘E’)时,需要递归地揭露其所有相邻的空方块,直到遇到有地雷相邻的方块为止。让我们一起来玩扫雷游戏!
2025-05-12 08:19:27
702
原创 528. 按权重随机选择
本文介绍了一种按权重随机选择下标的算法。给定一个正整数数组 w,其中 w[i] 表示下标 i 的权重,要求实现一个函数 pickIndex,使得选取下标 i 的概率与其权重成正比。核心思想是将权重数组转换为前缀和数组,并通过二分查找快速定位随机数对应的下标。最优解法的时间复杂度为 $O(\log n)$,空间复杂度为 $O(n)$。文章提供了 C 语言代码实现,并详细分析了时间复杂度和空间复杂度。该方法适用于需要根据权重进行随机选择的场景。
2025-05-12 08:17:33
719
原创 527. 单词缩写
如果存在多个单词的缩写形式相同,则将它们的缩写形式扩展为更具体的形式,直到所有缩写形式唯一。本题需要为每个单词生成缩写,并处理可能的冲突。缩写形式为:第一个字符 + 中间字符的数量 + 最后一个字符。返回每个单词对应的缩写列表,确保所有缩写形式唯一。给定一个由不同字符串组成的数组。
2025-05-10 08:52:36
1060
原创 526. 优美的排列
本题可通过回溯法遍历所有可能的排列,并检查每个排列是否满足优美排列的条件。也可以使用状态压缩动态规划优化时间复杂度,利用位运算表示已选择的数字集合。假设有从 1 到 n 的 n 个整数。用这些整数构造一个数组。返回可以构造的优美排列的数量。
2025-05-10 08:52:05
879
原创 525. 连续数组
通过记录前缀和首次出现的位置,可以快速找到满足条件的最长子数组。本题可通过前缀和与哈希表的方法解决。的最长连续子数组,并返回该子数组的长度。,找到含有相同数量的。
2025-05-10 08:49:07
538
原创 524. 通过删除字母匹配到字典里最长单词
本文讨论了如何通过删除字符串 s 中的某些字符,从字典 dictionary 中找到最长的匹配字符串。如果存在多个符合条件的字符串,则返回长度最长且字典序最小的那个。文章首先介绍了问题的背景和示例,接着分析了核心考点,包括子序列判断、排序与比较以及优化遍历。随后,提出了三种解法:暴力法、排序后遍历和预处理源字符串法,并详细解释了每种方法的时间复杂度。最后,提供了最优解法(预处理源字符串法)的 C 语言实现代码,并对其时间和空间复杂度进行了分析。最优解法的时间复杂度为 $O(n \log n + n \tim
2025-05-10 08:46:34
523
原创 523. 连续的子数组和
文章摘要 题目要求判断一个整数数组中是否存在至少长度为2的连续子数组,其和为给定整数 k 的倍数。通过前缀和与哈希表的结合,可以高效解决该问题。具体方法为:计算数组的前缀和,并记录每个前缀和对 k 取余的结果及其首次出现的位置。如果两个前缀和的余数相同,且它们的索引差大于等于2,则说明存在符合条件的子数组。该方法的时间复杂度为 $O(n)$,空间复杂度为 $O(min(n, k))$。示例代码展示了如何在C语言中实现这一算法,并处理了余数为负数的情况。
2025-05-10 08:44:32
646
原创 522. 最长特殊序列 II
题目要求找出给定字符串数组中最长的特殊序列,即某个字符串独有的子序列。特殊序列定义为该序列不能是其他字符串的子序列。通过优化解法,首先按字符串长度降序排序,然后逐个判断每个字符串是否是其他字符串的子序列。如果某个字符串不是其他任何字符串的子序列,则其长度即为最长特殊序列的长度。若没有这样的字符串,则返回 -1。该解法的时间复杂度为 $O(m^2 \times n)$,空间复杂度为 $O(1)$,其中 $m$ 是字符串数组的长度,$n$ 是字符串的平均长度。
2025-05-10 08:43:06
977
原创 521. 最长特殊序列 Ⅰ
题目要求找到两个字符串 a 和 b 的最长特殊序列的长度。最长特殊序列定义为某字符串独有的最长子序列,即不能是另一个字符串的子序列。如果两个字符串相同,则不存在最长特殊序列,返回 -1;否则,返回较长字符串的长度。最优解法通过直接比较两个字符串的长度和内容,时间复杂度为 $O(n)$,空间复杂度为 $O(1)$。
2025-05-10 08:41:41
331
原创 520. 检测大写字母
题目要求判断一个字符串的大写使用是否符合以下三种规则之一:全大写、全小写或首字母大写其余小写。通过模式识别,可以将问题转化为字符串处理中的模式匹配。最优解法采用一次遍历,统计大写字母数量并判断首字母的大小写状态,最后根据规则进行判断。C语言实现中,使用isupper函数判断字符大小写,并通过条件判断确定是否符合规则。该解法的时间复杂度为$O(n)$,空间复杂度为$O(1)$,效率较高。
2025-05-10 08:40:13
379
原创 519. 随机翻转矩阵
本题需要设计一个随机选择算法,保证每次选择时所有未被选中的元素概率均等。可以使用 Fisher-Yates 洗牌算法的变种,通过映射机制将已选中的元素交换到数组末尾,从而在。,且所有值被初始化为 0。请你设计一个算法,随机选取一个满足。尽量最少调用随机函数,并且优化时间和空间复杂度。,并将它的值变为 1。被选取的概率应当均等。时间内完成随机选择。
2025-05-10 08:38:27
726
原创 518. 零钱兑换 II
文章摘要: 题目要求计算用无限数量的不同面额硬币凑成指定总金额的组合数。该问题属于完全背包问题的变种,通过动态规划可以有效解决。最优解法采用一维动态规划,定义 dp[j] 表示凑成金额 j 的组合数。首先通过遍历硬币数组标记可达金额,然后再次遍历计算组合数。时间复杂度为 $O(n \times amount)$,空间复杂度为 $O(amount)$,其中 $n$ 为硬币种类数。代码实现通过两次遍历,确保高效计算组合数,并处理无法凑出金额的情况。
2025-05-10 08:34:49
885
原创 517. 超级洗衣机
本题可通过分析每个洗衣机需要移入或移出的衣服数量,结合前缀和的思想来解决。关键在于找到需要操作次数最多的位置,这个位置的操作次数决定了整体的最小操作步数。代表从左至右每台洗衣机中的衣服数量,返回能让所有洗衣机中剩下的衣服数量相等的最少的操作步数。如果不能使每台洗衣机中衣服数量相等,则返回 -1。(1 ≤ m ≤ n) 台洗衣机,与此同时将每台洗衣机的一件衣服送到相邻的一台洗衣机。开始的时候,每台洗衣机内可能有一定量的衣服,也可能是空的。在每一步操作中,你可以选择任意。给定一个非负整数数组。
2025-05-10 08:29:32
617
原创 516. 最长回文子序列
本文介绍了如何通过动态规划解决“最长回文子序列”问题。题目要求在不改变字符顺序的情况下,找到字符串中最长的回文子序列,并返回其长度。通过分析,最优解法是使用动态规划,并进一步优化为一维数组以降低空间复杂度。文章详细描述了动态规划的状态定义、状态转移方程,并提供了C语言实现代码。该解法的时间复杂度为$O(n^2)$,空间复杂度为$O(n)$,是解决该问题的最优方法。
2025-05-10 08:28:22
496
原创 515. 在每个树行中找最大值
题目要求在二叉树中找出每一层的最大值,并返回一个包含这些最大值的数组。通过广度优先搜索(BFS)或深度优先搜索(DFS)可以实现这一目标。BFS按层遍历二叉树,每层遍历结束后记录当前层的最大值;DFS则通过递归遍历,记录每个深度对应的最大值。最优解法采用BFS,使用队列按层遍历二叉树,时间复杂度为O(n),空间复杂度为O(w),其中n是节点数,w是二叉树的最大宽度。C语言代码展示了如何通过DFS实现这一功能,递归遍历二叉树并更新每层的最大值。
2025-05-10 08:26:38
575
原创 514. 自由之路
题目“自由之路”要求计算在电子游戏“辐射4”中拼写特定关键词所需的最少步数。给定一个环形字符串 ring 和一个关键词 key,需要通过顺时针或逆时针旋转 ring 将 key 的字符依次对齐12:00方向,并按下按钮完成拼写。最优解法采用动态规划,预处理 ring 中每个字符的位置,定义状态 dp[i][j] 表示拼写 key 的前 i 个字符且 ring 的第 j 个字符对齐时的最小步数。通过遍历所有可能的位置和旋转路径,逐步更新状态,最终得到最小步数。时间复杂度为 $O(m \times n^2)$,
2025-05-10 08:22:57
618
原创 513. 找树左下角的值
核心在于找到二叉树最后一层的最左边节点。BFS 通常按层遍历,最后一层的第一个节点即为所求;DFS 则通过记录最大深度和首次到达该深度的节点值来求解。:DFS 解法在空间上更优,尤其对于宽度较大的树。BFS 需要维护队列,可能占用更多空间。假设二叉树中至少有一个节点。给定一个二叉树的根节点。
2025-05-09 08:35:25
970
原创 512. 游戏玩法分析2
此问题可借助深度优先搜索(DFS)来解决。深度优先搜索适用于遍历树的所有路径,在遍历过程中,能够计算每条路径上节点值的和,进而找出最大和。给定一棵二叉树,每个节点都有一个整数值。你需要找出从根节点到叶子节点路径上节点值之和最大的路径,并返回这个最大和。
2025-05-09 08:33:56
776
原创 511. 游戏玩法分析 I
最优解法是使用GROUP BY和MIN(),因为它直接针对问题的本质(分组取最小值),逻辑简洁,执行效率高。窗口函数解法虽然更灵活,但在此问题中并不必要,而自连接解法效率最低,应避免使用。
2025-05-09 08:31:14
655
原创 510. 二叉搜索树中的中序后继 II
本题可根据二叉搜索树(BST)的性质来寻找中序后继。,找到该节点在树中的中序后继。如果节点没有中序后继,请返回。大的节点中键值最小的节点,即按中序遍历的顺序节点。给定一棵二叉搜索树和其中的一个节点。
2025-05-09 08:29:47
539
原创 509. 斐波那契数
斐波那契数列是一个经典的递归问题,但直接递归会导致大量重复计算。因此,通常使用迭代或动态规划的方法来优化时间复杂度。开始,后面的每一项数字都是前面两项数字的和。表示,形成的序列称为。
2025-05-09 08:28:48
646
原创 508. 出现次数最多的子树元素和
本题可以使用深度优先搜索(DFS)来遍历二叉树,计算每个子树的元素和。同时,使用哈希表来记录每个子树元素和出现的次数,最后找出出现次数最多的子树元素和。,请返回出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的子树元素和(不限顺序)。定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身)。给你一个二叉树的根结点。
2025-05-09 08:27:20
612
原创 507. 完美数
本题可通过找出给定正整数的所有正因子并求和,然后与该正整数本身进行比较来判断是否为完美数。可以利用数学性质优化因子查找过程,因为一个数的因子是成对出现的,例如若。之和相等,我们称它为 「完美数」。,如果它和除了它自身以外的所有。的因子,所以只需遍历到。,如果是完美数,返回。
2025-05-09 08:24:48
932
原创 506. 相对名次
本题核心在于根据运动员的得分来确定其名次,并将名次转换为对应的获奖描述。可以通过排序来确定每个得分对应的名次,再根据名次生成最终的结果数组。位运动员在比赛中的得分。的运动员得分最高,名次第。位运动员的获奖情况。
2025-05-09 08:23:43
697
原创 505. 迷宫 II
虽然迷宫中的路径看起来是离散的,但每次滚动的距离可能不同,因此本质上是一个加权图。每个位置作为节点,每次滚动的距离作为边权。Dijkstra算法适用于这种需要找到最短路径的场景,通过优先队列(最小堆)来优化搜索顺序。由空地和墙组成的迷宫中有一个球。球可以向上下左右四个方向滚动,但在遇到墙壁前不会停止滚动。1 表示墙壁,0 表示空地。起始位置和目的地的坐标用行和列索引表示。给定球的起始位置、目的地和迷宫,找出球从起始位置到目的地所需的。,并返回该路径的长度。如果球无法到达目的地,返回 -1。
2025-05-09 08:22:20
626
原创 504. 七进制数
本题属于进制转换问题,需要将十进制数转换为七进制数。基本思路是通过不断地对7取模和整除操作,逐步构建七进制数的每一位。,将其转换为七进制数并以字符串形式返回。
2025-05-09 08:21:12
623
原创 503. 下一个更大元素 II
本题是单调栈的经典应用场景。与普通的下一个更大元素问题不同,本题的数组是循环的,因此需要处理元素的循环查找。可以通过将数组长度翻倍,模拟循环数组的效果,然后利用单调栈来高效地找到每个元素的下一个更大元素。是按数组遍历顺序,这个数字之后的第一个比它更大的元素,这意味着你应该循环地搜索它的下一个更大的元素。
2025-05-09 08:20:06
1005
原创 502. IPO
为了以更高的价格将股票卖给风险投资公司,力扣希望在 IPO 之前开展一些项目以增加其资本。由于资源有限,它只能在 IPO 之前完成最多。本题属于贪心算法和优先队列(最大堆)的经典应用场景。核心思路是:在每一步选择中,总是选择当前资本。能够启动的项目中利润最大的项目,从而使得总资本增长最快。这种策略能够保证在有限的项目数。个项目的前提下,按任意顺序选择项目。对于每个项目,只有当。个不同项目后得到最大总资本的方式。时才能启动,启动项目后会获得。返回最终可获得的最大资本。内获得最大的总资本。
2025-05-09 08:18:45
952
原创 501. 二叉搜索树中的众数
此解法通过两次中序遍历实现:第一次确定众数的最大频率,第二次收集所有符合条件的众数。虽然需要两次遍历,但代码简洁且易于理解,空间复杂度为。在有序序列中,相同元素会连续出现,因此可以通过一次遍历统计每个元素的出现次数,进而找出众数。给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。:你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内)空间复杂度,可考虑 Morris 遍历,但会增加代码复杂度。:如果众数超过1个,不需考虑输出顺序。
2025-05-09 08:17:26
529
原创 500. 键盘行
本题可通过遍历每个单词的字符,判断这些字符是否都来自键盘的同一行。可以使用哈希表来存储每个字符所在的行号,然后遍历单词中的字符,检查它们的行号是否一致。,只返回可以使用在美式键盘同一行的字母打印出来的单词。
2025-05-09 08:15:57
568
原创 499. 迷宫 III
这是一个路径搜索问题,类似于迷宫问题,可以使用广度优先搜索(BFS)或深度优先搜索(DFS)来解决。由于需要找到最短路径,BFS 通常是更合适的选择。同时,需要处理球的滚动和路径记录等问题。表示)组成的迷宫中有一个球。球可以途经空地向四个方向滚动(上、下、左、右),但遇到墙就会停止滚动。当球停下时,可以选择下一个方向。给定迷宫的字符串表示和球的起始位置,找出让球以最短距离进入洞的路径。距离的定义是球从起始位置(不包括)到洞(包括)经过的空地个数。球和洞都只会出现一次,且球和洞不会在同一位置。
2025-05-09 08:13:37
674
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人