自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 收藏
  • 关注

原创 Leetcode 3061. 计算滞留雨水

第一步,根据id升序排列和窗口函数,小于等于id的中记录中height的最大值left_max;并根据id降序排列和窗口函数,大于等于id的记录中height的最大值right_max。编写一个解决方案来计算景观中 沙洲之间 可以滞留的雨水量,认为每个沙洲的 宽度 为 1 个单位。第二步,求LEAST(left_max,right_max)-height的列val。id 是这张表的主键(值互不相同的列),并且保证有序。这张表的每一行都包含 id 和 height。第三步,求val列的和。

2025-05-24 09:08:50 137

原创 Leetcode 2995. 观众变主播

这张表包含 user id, session start, session end, session id 和 session type。session_type 是一个 ENUM (枚举) 类型,包含(Viewer, Streamer)两个类别。编写一个解决方案,找到 首次会话 为 观众身份 的用户,其 主播会话 数量。第一步,查询第一个会话是“观众”的所有user_id,记为T1表格。按照会话数量和 user_id 降序 排序返回结果表。session_id 是这张表具有唯一值的列。

2025-05-23 21:42:37 143

原创 Leetcode 2792. 计算足够大的节点数

第二步,构建递归函数。递归任务:返回node子树中所有节点值的升序数组的前k个元素子数组;并在递归的过程中进行计数,更新self.result。给定一棵二叉树的根节点 root 和一个整数 k。如果 u == v 或者 v 是 u 的祖先,则节点 u 在节点 v 的 子树 中。第一步,构建维护变量。result维护足够大的节点数。2.2.对node的左右子节点的递归结果数组进行归并。它的子树中 至少 有 k 个节点。时间复杂度:O(Klog(N))第三步,调用递归,返回结果。递归+归并+二分查找。

2025-05-23 16:58:56 272

原创 Leetcode 3313. 查找树中最后标记的节点

返回一个数组 nodes,表示在时刻 t = 0 标记了节点 i,那么树中最后标记的节点是 nodes[i]。使用maxLen1和maxLen2分别维护node结点到达叶节点第一长和第二长的路径长度,node1和node2维护node结点到达叶节点第一长和第二长的路径的叶节点。第四步,遍历所有节点,枚举结点node,根据dists1和dists2选择p1和p2中距离node更远的节点,构建数组result,并进行返回。2.4.根据子节点的到叶节点的最长路径更新当前节点到达叶节点的第一长和第二长路径信息。

2025-05-23 09:50:34 233

原创 Leetcode 1522. N 叉树的直径

N 叉树的直径指的是树中任意两个节点间路径中 最长 路径的长度。这条路径可能经过根节点,也可能不经过根节点。使用maxLen1和maxLen2分别维护node结点到达叶节点第一长和第二长的路径长度。递归任务:返回从node节点开始,到达叶节点最长的两条路径的长度。(N 叉树的输入序列以层序遍历的形式给出,每组子节点用 null 分隔)给定一棵 N 叉树 的根节点 root ,计算这棵树的直径长度。第一步,定义维护变量。当node为叶节点时,递归退出。第三步,调用递归,更新result;时间复杂度:O(n)

2025-05-22 23:07:59 399

原创 Leetcode 1199. 建造街区的最短时间

第二步,不断从heap堆中弹出最小的两个元素,并取两者最大值加上split重新加入堆中,实现哈夫曼树的更新;所以,一个工人要么需要再召唤一个工人(工人数增加 1);将最小的两个工作的最大值+选择工人的split时间合并为一个工作加入到堆中,使用哈夫曼的思路求最少时间。注意:如果两个工人同时召唤别的工人,那么他们的行为是并行的,所以时间花费仍然是 split。最开始的时候只有 一个 工人,请你最后输出建造完所有街区所需要的最少时间。一个工人再召唤一个工人所花费的时间由整数 split 给出。

2025-05-22 10:12:28 220

原创 Leetcode 3506. 查找消除细菌菌株所需时间

第二步,不断从heap堆中弹出最小的两个元素,并取两者最大值加上split重新加入堆中,实现哈夫曼树的更新;3)一个白细胞可以将自身分裂为两个白细胞,但这需要 splitTime 单位时间。将最小的两个工作的最大值+分裂的splitTime时间合并为一个工作加入到堆中,使用哈夫曼的思路求最少时间。然而,单独的白细胞很快意识到它无法跟上细菌的生长速度。在人体微观世界中,免疫系统面临着一项非凡的挑战:对抗快速繁殖的细菌群落,这对身体的生存构成威胁。4)一个白细胞仅可以攻击一个细菌菌株。第一步,构建维护变量。

2025-05-22 09:57:31 201

原创 百度网盘+夸克网盘批量转存工具+使用教程

baiduCookie.txt为百度网盘的cookie文本,如果links.txt文件中存在百度分享链接,则必须设置;如果links.txt中存在夸克分享链接,则需要在quarkCookie.txt文件中设置夸克网盘的cookie文本。configs/cookies/baiduCookie.txt和configs/cookies/quarkCookie.txt文件的配置。configs/links.txt文件存储需要转存的链接信息,每三个非空行为一个链接项。支持网盘类型:百度网盘、夸克网盘。

2025-05-21 10:51:31 762

原创 Leetcode 2158. 每天绘制新区域的数量【Plus题】

给你一个长度为 n 、下标从 0 开始的二维整数数组 paint ,其中 paint[i] = [starti, endi] 表示在第 i 天你需要绘制 starti 和 endi 之间的区域。整体是一个求区间和的线段树,主要区别在于每个结点的非0即1,lazy标记区间中元素是否全为0;然后使用区间和求出区间中被填充的位置个数,间接求出空闲的位置,即需要绘画的区域长度。返回一个长度为 n 的整数数组 worklog,其中 worklog[i] 是你在第 i 天绘制的 新 区域的数量。

2025-04-18 15:16:30 299

原创 Leetcode 3359. 查找最大元素不超过 K 的有序子矩阵【Plus题】

total更新:如果rows[i][j]大于或等于单调栈栈顶的元素,则直接将rows[i][j]增加到total中,并入栈即可;stack维护随着rows[i][j]严格递增的单调栈,存储单元形式为(rows[i][j],height*=rows矩阵中(i,j)上面连续不小于rows[i][j]的个数+1)第一步,构建rows矩阵,rows[i][j]表示从mat[i][j]开始向左连续非严格递增且小于等于k的元素的个数(包括本身)第二步,遍历每一列,列号记为j,再遍历每列中的每行,行号即为i。

2025-04-17 12:11:05 353

原创 Leetcode 1504. 统计全 1 子矩形

total更新:如果rows[i][j]大于或等于单调栈栈顶的元素,则直接将rows[i][j]增加到total中,并入栈即可;2.1.构建每一列的维护变量。stack维护随着rows[i][j]严格递增的单调栈,存储单元形式为(rows[i][j],height*=rows矩阵中(i,j)上面连续不小于rows[i][j]的个数+1)第一步,构建rows矩阵,rows[i][j]表示从mat[i][j]开始向左连续为1的个数(包括本身)第二步,遍历每一列,列号记为j,再遍历每列中的每行,行号即为i。

2025-04-17 12:09:12 639

原创 Leetcode 325. 和等于 k 的最长子数组长度【Plus题】

给定一个数组 nums 和一个目标值 k,找到和等于 k 的最长连续子数组长度。如果不存在任意一个符合要求的子数组,则返回 0。第一步,构建维护变量。map1哈希表记录每个前缀和第一次出现的索引下标。使用哈希表记录每个前缀和第一次出现的索引下标。更新维护变量并找到最优解。2.1.更新最优解到result。时间复杂度:O(n)2.2.更新map1。

2025-04-16 10:43:41 308

原创 Leetcode 2814. 避免淹死并到达目的地的最短时间【Plus题】

现给定一个 n * m 的索引从 0 开始的二维字符串网格 land,目前你站在为 “S” 的单元格上,你需要到达为 “D” 的单元格。第一步,从所有”*”的位置(即被淹没的位置)开始进行广搜,使用times1矩阵标记被淹没的时间,不能被淹没的位置标记为inf。第二步,从”S”的位置开始进行广搜,并记录广搜到各处的时间,并跳过石头处和被淹没处,构建到达各处的时间矩阵times2。你不能踩在被淹没的单元格上,因为你会淹死(同时,你也不能踩在在你踩上时会被淹没的单元格上)。“.”:这些单元格是空的。

2025-04-15 09:55:00 406

原创 Leetcode 1584. 连接所有点的最小费用

连接点 [x_i, y_i] 和点 [x_j, y_j] 的费用为它们之间的 曼哈顿距离 :|x_i – x_j| + |y_i – y_j| ,其中 |val| 表示 val 的绝对值。给你一个points 数组,表示 2D 平面上的一些点,其中 points[i] = [x_i, y_i]。只有任意两点之间 有且仅有 一条简单路径时,才认为所有点都已连接。Python代码(Kruskal算法)(附并查集模板)最小生成树+Prim算法/Kruskal算法。Python代码(附Prim算法模板)

2024-10-21 11:50:36 368

原创 Leetcode 1926. 迷宫中离入口最近的出口

给你一个 m x n 的迷宫矩阵 maze (下标从 0 开始),矩阵中有空格子(用 ‘.’ 表示)和墙(用 ‘+’ 表示)。同时给你迷宫的入口 entrance ,用 entrance = [entrancerow, entrancecol] 表示你一开始所在格子的行和列。第三步,BFS模板进行BFS遍历,并记录BFS的层数,BFS遍历找到出口时退出遍历,此时的层数即为步数;请你返回从 entrance 到最近出口的最短路径的 步数 ,如果不存在这样的路径,请你返回 -1。

2024-10-20 13:43:55 393

原创 Leetcode 1135. 最低成本连通所有城市

给你整数 n 和一个数组 conections,其中 connections[i] = [x_i, y_i, cost_i] 表示将城市 x_i 和城市 y_i 连接所要的cost_i(连接是双向的)。返回连接所有城市的最低成本,每对城市之间至少有一条路径。如果无法连接所有 n 个城市,返回 -1。第二步,根据Prim算法模板算出最小生成树的节点和最小权值和,判断最小生成树是否存在并返回结果。想象一下你是个城市基建规划者,地图上有 n 座城市,它们按以 1 到 n 的次序编号。第一步,构建图的邻接表。

2024-10-19 10:14:19 507

原创 Leetcode 1129. 颜色交替的最短路径

返回长度为 n 的数组 answer,其中 answer[X] 是从节点 0 到节点 X 的红色边和蓝色边交替出现的最短路径的长度。如果不存在这样的路径,那么 answer[x] = -1。对于子节点加入队列的条件中加上父节点和子节点的颜色标识之和为1,这样就能保证路径的颜色交替条件。同时在过程中记录递归层数,即为步数,记录到result数组中。给定一个整数 n,即有向图中的节点数,其中节点标记为 0 到 n – 1。图中的每条边为红色或者蓝色,并且可能存在自环或平行边。标记红色的边为0,蓝色的边为1。

2024-10-19 10:12:01 667

原创 Leetcode 841. 钥匙和房间

最初,除 0 号房间外的其余所有房间都被锁住。你的目标是进入所有的房间。然而,你不能在没有获得钥匙的时候进入锁住的房间。给你一个数组 rooms 其中 rooms[i] 是你进入 i 号房间可以获得的钥匙集合。当你进入一个房间,你可能会在里面找到一套 不同的钥匙,每把钥匙上都有对应的房间号,即表示钥匙可以打开的房间。你可以拿上所有钥匙去解锁其他房间。第二步,递归任务:从node节点开始访问图中的节点,并使用visited集合记录访问的节点。第三步,根据访问的节点个数判断是否可以访问所有的房间。

2024-10-18 10:42:22 474

原创 Leetcode 721. 账户合并

请注意,即使两个账户具有相同的名称,它们也可能属于不同的人,因为人们可能具有相同的名称。给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails 表示该账户的邮箱地址。合并账户后,按以下格式返回账户:每个账户的第一个元素是名称,其余元素是 按字符 ASCII 顺序排列 的邮箱地址。第一步,构建email->username的映射,同时构建邮箱之间的并查集(同一个账户的邮箱属于一个集合)

2024-10-18 10:39:20 1376

原创 Leetcode 802. 找到最终的安全状态

有一个有 n 个节点的有向图,节点按 0 到 n – 1 编号。图由一个 索引从 0 开始 的 2D 整数数组 graph表示, graph[i]是与节点 i 相邻的节点的整数数组,这意味着从节点 i 到 graph[i]中的每个节点都有一条边。如果一个节点没有连出的有向边,则该节点是 终端节点。如果从该节点开始的所有可能路径都通向 终端节点 ,则该节点为 安全节点。逆向拓扑排序法 / DFS+三色染色法。Python代码(DFS+三色染色法)Python代码(逆向拓扑排序法)

2024-10-17 14:59:31 474

原创 Leetcode 1514. 概率最大的路径

给你一个由 n 个节点(下标从 0 开始)组成的无向加权图,该图由一个描述边的列表组成,其中 edges[i] = [a, b] 表示连接节点 a 和 b 的一条无向边,且该边遍历成功的概率为 succProb[i]。如果不存在从 start 到 end 的路径,请 返回 0。指定两个节点分别作为起点 start 和终点 end ,请你找出从起点到终点成功概率最大的路径,并返回其成功概率。第二步,通过Dijkstra算法算出单源最长路径,将路径相加变成路径相乘。Dijkstra算法+优先队列优化。

2024-10-17 14:56:48 597

原创 Leetcode 1857. 有向图中最大颜色值

给你一个字符串 colors ,其中 colors[i] 是小写英文字母,表示图中第 i 个节点的 颜色 (下标从 0 开始)。同时给你一个二维数组 edges ,其中 edges[j] = [a_j, b_j] 表示从节点 a_j 到节点 b_j 有一条 有向边。图中一条有效 路径 是一个点序列 x_1 -> x_2 -> x_3 -> …-> x_k ,对于所有 1 <= i < k ,从 x_i 到 x_i+1 在图中有一条有向边。dp[i][j]为以i节点结尾的路径的颜色j的最大数量。

2024-10-16 10:38:55 627

原创 Leetcode 1489. 找到最小生成树里的关键边和伪关键边

给你一个 n 个点的带权无向连通图,节点编号为 0 到 n-1 ,同时还有一个数组 edges ,其中 edges[i] = [fromi, toi, weighti] 表示在 fromi 和 toi 节点之间有一条带权无向边。无向图的连通性质:取权值为w的边,让小于w的边构成一个一个的连通分量comps,将每个连通分量comp作为一个节点,将w大小的节点与comps这些节点重新构建一个图,记为compG。请注意,你可以分别以任意顺序返回关键边的下标和伪关键边的下标。解题步骤请看代码注释。

2024-10-15 18:03:55 546

原创 Leetcode 1168. 水资源分配优化

对于每个房子 i,我们有两种可选的供水方案:一种是直接在房子内建造水井,成本为 wells[i – 1] (注意 -1 ,因为 索引从0开始 );另一种是从另一口井铺设管道引水,数组 pipes 给出了在房子间铺设管道的成本,其中每个 pipes[j] = [house1_j, house2_j, cost_j] 代表用管道将 house1_j 和 house2_j连接在一起的成本。第二步,使用Prim算法模板或者Kruskal算法模板解除最小生成树的权值和(详情可以看下代码的注释)

2024-10-14 11:42:11 615

原创 Leetcode 1203. 项目管理

有 n 个项目,每个项目或者不属于任何小组,或者属于 m 个小组之一。group[i] 表示第 i 个项目所属的小组,如果第 i 个项目不属于任何小组,则 group[i] 等于 -1。项目和小组都是从零开始编号的。可能存在小组不负责任何项目,即没有任何项目属于这个小组。如果存在多个解决方案,只需要返回其中任意一个即可。如果没有合适的解决方案,就请返回一个 空列表。第二步,构建组间邻接表和组内邻接表。第一步,-1的组的重新定义。第三步,组间拓扑排序。第四步,组内拓扑排序。

2024-10-13 12:32:36 557

原创 Leetcode 1192. 查找集群内的关键连接

力扣数据中心有 n 台服务器,分别按从 0 到 n-1 的方式进行了编号。它们之间以 服务器到服务器 的形式相互连接组成了一个内部集群,连接是无向的。用 connections 表示集群网络,connections[i] = [a, b] 表示服务器 a 和 b 之间形成连接。任何服务器都可以直接或者间接地通过网络到达任何其他服务器。关键连接 是在该集群中的重要连接,假如我们将它移除,便会导致某些服务器无法访问其他服务器。构建tarjan算法的模板,构建图graph,然后获取桥即可,详情请看代码中的注释。

2024-10-12 12:42:38 332

原创 Leetcode 839. 相似字符串组【附并查集模板】

注意,”tars” 和 “arts” 是在同一组中,即使它们并不相似。“rats” 和 “arts” 也是相似的,但是 “star” 不与 “tars”,”rats”,或 “arts” 相似。第一步,构建检测两个字符串是否相似的判断函数,实现该功能只需要统计俩字符串中不相等字符的个数,因为题目已经规定每个字符串的都是同一个字符串的异位词,如果不相等的字符个数等于2,则代表相似,反之,不相似。第三步,遍历并查集的roots字典,获取构建的集合的个数(键值相等的键值对数即为集合个数),集合的个数即为题解。

2024-10-11 10:26:47 458

原创 Leetcode 864. 获取所有钥匙的最短路径

BFS的使用队列存储遍历项,遍历的项为结构为(x坐标,y坐标,当前步数,当前已获取的钥匙的状态字符串),同时使用visited集合存储已经访问的不可重复状态,访问项结构为(x坐标,y坐标,当前已获取的钥匙的状态字符串);这里BFS的判断是否将下一个点(nx,ny)加入到队列的逻辑相对于普通的BFS更复杂,因为当碰到钥匙时,其前面的路径上的部分点是可以重复访问的,所以的前面的visited最后加上了keys项。换言之,每个锁有唯一对应的钥匙,每个钥匙也有唯一对应的锁。返回获取所有钥匙所需要的移动的最少次数。

2024-10-10 14:17:16 731

原创 Leetcode 18. 四数之和

第三步,遍历获取四个数字中的前两个数字。如果i处的值和nums最后三个数字的和小于target,则i和后面的数的组合的和都会小于target,跳过该轮循环遍历下一个i。如果四个数字的组合等于target,则将组合加入到result数组中,同时值得注意的是为了防止出现重复数组被放到结果数组中,需要让left指针向右移,最终让left指向的值不等于刚才的值的位置,同理的也需要让right向左移直到指向与刚才不相等的值的位置。第一步,边界条件判断,如果nums的长度小于4,则不可能组合成合法的组合,返回空数组。

2024-10-09 10:24:52 583

原创 Leetcode 37. 解数独

第一步,使用数组记录每一行、每一列、每一块的各个数字的存在状态,分别记为rows、cols、blocks,其中rows[i][j]=True表示j+1数字在下标为i的行中,反之亦然,cols和blocks也同理。与此同时,使用spaces记录所有为空的点的坐标,在后续的回溯中将其遍历填充。注意:在递归的过程中,会将board进行修改,最终的回溯退出时,构建的数独为合法数独组合,此时的board即为题解,由于题目已经声明了数独一定有解,所以spaceIndex=0时的回溯函数一定返回True。

2024-10-08 10:44:21 982

原创 Leetcode 10. 正则表达式匹配

第二步,状态初始化。初始化当匹配字符串为空时的匹配状态(即j=0时的状态),因为除了原字符串为空时,dp[0][0]=True,其余的情况下dp[x][0]=False,所以只需要初始化dp[0][0]=True即可。当判断前i个字符和前j个匹配字符是否匹配时,这里先预先定义俩字符匹配为匹配字符为.或者匹配字符和原字符两者相等。给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。dp[i][j]为s的前i个字符串和p的前j个字符串是否匹配。

2024-10-07 11:11:12 509

原创 Leetcode 1802. 有界数组中指定下标处的最大值

第三步,构建check函数,这里的check函数判断nums[index]为indexVal条件下,贪心构建的数组和是否小于等于maxSum。红:nums[index]的条件下,numsSum<=maxSum,蓝:numsSum>maxSum。第一步,确定二分的对象,由于numsSum随nums[index]单调递增,所以可以对nums[index]作为二分对象,numsSum作为二分的判断条件。nums[index]越小,numsSum越小,通过该单调性可以进行二分查找nums[index]

2024-10-06 10:30:15 499

原创 Leetcode 1283. 使结果不超过阈值的最小除数

第三步,红蓝染色法特征定义。红:在除数mid下,除数和大于threshold的项,蓝:在除数mid下,除数和小于等于threshold的项。给你一个整数数组 nums 和一个正整数 threshold ,你需要选择一个正整数作为除数,然后将数组里每个数都除以它,并对除法结果求和。判断在divisor除数的条件下,其除数的向上取整的和是否大于threshold。选择的除数越大,除数和也会越小,这是一个递减的过程,所以可以使用二分查找的方法。第一步,初始化除数的边界值,最小为1,最大为nums中的最大值。

2024-10-05 11:16:49 395

原创 Leetcode 1011. 在 D 天内送达包裹的能力

红:装载量不能保证在days天任务,蓝:装载量能保证在days天内完成任务。传送带上的第 i 个包裹的重量为 weights[i]。我们装载的重量不会超过船的最大运载重量。第二步,设计检测一个装载量mid是否能在days天完成任务的程序。第一步,初始化装载量的边界值left和right为weights的最大值和和。返回能在 days 天内将传送带上的所有包裹送达的船的最低运载能力。传送带上的包裹必须在 days 天内从一个港口运送到另一个港口。二分查找找到第一个在days天内能完成装载任务的装载量。

2024-10-05 11:15:07 433

原创 Leetcode 1631. 最小体力消耗路径

一开始你在最左上角的格子 (0, 0) ,且你希望去最右下角的格子 (rows-1, columns-1) (注意下标从 0 开始编号)。你每次可以往 上,下,左,右 四个方向之一移动,你想要找到耗费 体力 最小的一条路径。红:在当前体力消耗值a下,不能完成从左上角到右下角的任务的项,蓝:在当前体力消耗值下,能完成任务的项。第二步,定义check函数,判断体力值HP是否能完成从左上角到右下角的任务,使用广度有效搜索的方法判断是否能到达。第一步,初始化体力消耗值的边界值,最小为0,最大为10。

2024-10-05 11:13:17 847

原创 Leetcode 1498. 满足条件的子序列数目

第三步,遍历第一个值i,通过二分法找到最后一个j使得nums[i]+nums[j]<=target,累加2**(j-i)即为题解(注意取模)请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target 的 非空 子序列的数目。由于答案可能很大,请将结果对 109 + 7 取余后返回。给你一个整数数组 nums 和一个整数 target。遍历第一个元素,以第一个元素为锚,二分查找第二个边界条件。第二步,预处理2的n次方的取模值,应用的原理是(a。第一步,将数组进行升序排列。

2024-10-04 11:41:10 357

原创 Leetcode 540. 有序数组中的单一元素

第一步,确定红蓝染色的特征。特征一:红:位置i处值与处于同一对的元素相等;蓝:位置i处值与处于同一对的元素不相等(如果i为奇数,相邻元素取右边的偶数,反之取左边边的奇数)。特征二:左闭右开,left-1始终指向红色,right始终指向蓝色。注意:标准的二分模板会出现索引超范围问题,为了解决超限问题,可以在尾部添加一个不能取到的值。给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。

2024-10-03 10:32:58 350

原创 Leetcode 2300. 咒语和药水的成功对数

第二步,遍历spells,对每个spell,使用二分法获取第一个potions[i]+spell >= success的i,对应的spell的成功组合数即为len(potions)-i,将结果一项一项添加到结果数组中,最后返回结果数组。从spells中遍历每一个魔法spell,并用二分法从升序排列后的potions中找到第一个potions[i]+spell >= success的i,len(potions)-i即为返回数组对应魔法的成功组合数。第一步,将药水数组进行升序排列。

2024-10-03 10:30:18 595

原创 Leetcode 275. H 指数 II

给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数,citations 已经按照 升序排列。计算并返回该研究者的 h 指数。h 指数的定义:h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (n 篇论文中)至少 有 h 篇论文分别被引用了至少 h 次。第二步,使用二分查找的红蓝染色法+未标记的区间采用左闭右闭方式,找到最后一个citations[i]>=i,对应的i+1即为题解。

2024-10-02 10:46:27 843

原创 Leetcode 611. 有效三角形的个数

第二步,从0至length-3遍历第一条边i,如果边i长度为0,在跳过此次循环;从i至length-2遍历第二条边j,使用二分法找到在j+1至length-1之间的最后一个k,使nums[i]+nums[j]>nums[k]的,根据k和j获取此次的合法组合数,循环将所有的合法组合数进行累加,最终的累加值即为题解。升序排列后,去两条边a和b,取b后面的第三条边c;a+c>b和b+c>a一定成立,只需要保证a+b>c,则a、b、c就可以构成一个合法三角形。第一步,将nums进行升序排列。

2024-10-01 10:41:24 436

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除