自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Leetcode 1645. Hopper 公司查询 II

返回按 month 升序 排列的结果表,其中 month 是月份的编号(一月是 1,二月是 2,等等)。第二步,根据各个"%Y%m"的大小关系将months和Drivers表格连接起来,并根据month分组聚合统计数量,获取每个月在职司机数active_drivers。该表的每一行均包含行程 ID(ride_id),用户 ID(user_id) 以及该行程的日期 (requested_at)。该表的每一行均包含驾驶员的ID以及他们加入 Hopper 公司的日期。ride_id 是该表具有唯一值的列。

2025-06-06 09:52:45 508

原创 Leetcode 1892. 页面推荐Ⅱ

如果页面被user_id的 至少一个朋友喜欢 ,而 不被user_id喜欢 ,你的系统将 推荐 一个页面到user_id。(user1_id,user2_id) 是 Friendship 表的主键(具有唯一值的列的组合)。(user_id,page_id) 是 Likes 表的主键(具有唯一值的列)。以 任意顺序 返回结果表。

2025-06-06 07:55:00 301

原创 Leetcode 2494. 合并在同一个大厅重叠的活动

第一步,使用临时变量@g表示上一行的分组(hall_id相同同时有重叠时间事件为同一分组),@e表示当前hall的最大结束时间,@h表示上一行的hall_id;然后遍历过程中更新三个临时变量。编写解决方案,合并在 同一个大厅举行 的所有重叠活动。如果两个活动 至少有一天 相同,那么它们就是重叠的。该表的每一行表示活动的开始日期和结束日期,以及活动举行的大厅。第二步,通过分组g进行分组获取重叠事件的整合。表: HallEvents。该表可能包含重复字段。以任意顺序返回结果表。

2025-06-05 10:19:32 341

原创 Leetcode 3088. 使字符串反回文

反之,如果中间的两个字符相等,记中间字符的前段长度为r1,则需要中间后面r1的部分替换为非中间字符,等价于将s1[n//2-1]的下一个不同字符后面的连续d个字符子串移动到正中间(d为此时中间字符子串的前部分的长度)当s中某一个字符个数超过长度的一半,那么一定不能操作使其成为反回文串,直接返回"-1"即可。反之,按各个字符的字典序连续的连接起来,形成一个新的字符串,记为s1。我们称一个长度为偶数的字符串 s 为 反回文 的,如果对于每一个下标 0 <= i < n ,s[i]!

2025-06-04 09:37:34 695

原创 Leetcode 1336. 每次访问的交易次数

第二步,T1中,以user_id,transaction_date作为主键,对(amount>0)的求和,得到每个用户每次访问的交易次数,记为字段transactions_count,得到表格T2。可以保证用户 (user) 在 transaction_date 访问了银行 (也就是说 Visits 表包含 (user_id, transaction_date) 行)第三步,T2中,统计所有transactions_count出现的次数,记为字段visits_count,得到表格T3。

2025-06-03 10:41:11 546

原创 Leetcode 261. 以图判树

给定一个整数 n 和一个 edges 列表,其中 edges[i] = [ai, bi] 表示图中节点 ai 和 bi 之间存在一条无向边。第二步,遍历所有的边,将相关相连的点进行连接,如果边的两端都在同一个集合中,则代表存在环,直接返回false。如果这些边能够形成一个合法有效的树结构,则返回 true ,否则返回 false。第三步,如果图中无环,则只要并查集中的集合数为1就能保证图能构建成熟。第三步,如果图中无环且只有一个连通分量则可以构建成树。第一步,构建并查集,并将所有的节点添加到并查集中。

2025-06-03 10:39:32 350

原创 Leetcode 1136. 并行课程

给你一个整数 n ,表示编号从 1 到 n 的 n 门课程。另给你一个数组 relations ,其中 relations[i] = [prevCoursei, nextCoursei] ,表示课程 prevCoursei 和课程 nextCoursei 之间存在先修关系:课程 prevCoursei 必须在 nextCoursei 之前修读完成。在一个学期内,你可以学习 任意数量 的课程,但前提是你已经在 上 一学期修读完待学习课程的所有先修课程。请你返回学完全部课程所需的 最少 学期数。

2025-06-02 10:18:00 625

原创 Leetcode 2123. 使矩阵中的 1 互不相邻的最小操作数

在所有值为1的结点中,其中偶数下标行的偶数下标结点和奇数下标行的奇数下标结点为左结点集合uSet,其余结点为右结点集合vSet;在所有值为1的结点中,其中偶数下标行的偶数下标结点和奇数下标行的奇数下标结点为左结点集合uSet,其余结点为右结点集合vSet;如果一个矩阵中,没有 1 与其它的 1 四连通(也就是说所有 1 在上下左右四个方向上不能与其他 1 相邻),那么该矩阵就是 完全独立 的。二分图+Hopcroft-karp算法求二分图的最大匹配数。二分图+匈牙利算法求二分图的最大匹配数。

2025-06-02 10:16:05 604

原创 Leetcode 2093. 前往目标城市的最小费用

输入包含一个二维数组 highways ,其中 highways[i] = [city1i, city2i, tolli] 表示有一条连接城市 city1i 和 city2i 的双向公路,允许汽车缴纳值为 tolli 的费用从 city1i 前往 city2i 或 从 city2i 前往 city1i。第二步,使用堆进行遍历。堆中结点的形式为(结点到start的结点的距离,当前结点,剩余的折扣数)2.5.遍历邻结点并将新的结点压入堆中(分为不使用折扣的结点和使用折扣的虚拟结点)Dijkstra算法。

2025-06-01 09:44:02 451

原创 Leetcode 269. 火星词典

如果前面 min(s.length, t.length) 字母都相同,那么 s.length < t.length 时,s 的字典顺序也小于 t。给定一个字符串列表 words ,作为这门语言的词典,words 中的字符串已经 按这门新语言的字母顺序进行了排序。在第一个不同字母处,如果 s 中的字母在这门外星语言的字母顺序中位于 t 中字母之前,那么 s 的字典顺序小于 t。第二步,kahn算法进行拓扑排序。先判断图中是否有环,如果无环,返回任意一个拓扑排序的序列,如果有环,返回空字符串。

2025-06-01 09:42:13 362

原创 Leetcode 1908. Nim 游戏 II

在每个玩家的回合中,玩家需要 选择 任一非空石头堆,从中移除任意 非零 数量的石头。如果不能移除任意的石头,就输掉游戏,同时另一人获胜。给定一个整数数组 piles ,piles[i] 为 第 i 堆石头的数量,如果 Alice 能获胜返回 true ,反之返回 false。命题:如果nim游戏先手选择时的石子堆数为[a1,a2,...,an],如果x=a1^a2^...^an=0,则先手必败,如果x!证明2:(x==0,则后手必败)(反证)SG函数 / 记忆化搜索 / 公式。

2025-05-31 08:56:33 381

原创 Leetcode 465. 最优账单平衡

如果i子集的和为0,则枚举i的子集j,dp[i]=min([dp[j]+dp[i^j] for j in i的子集])(其中i^j为i中j子集的补集)(i的子集通过k=(i-1)&i,k=(k-1)&i进行枚举)dp[i]表示子集i的最小交易次数,这里使用二进制数字i中各个位上为1的状态确定cnts中的子集(也就是状态压缩),对于长度为n的数组,也刚好有2^n个子集。3.3.子集和为0,则枚举i子集的子集j,进行状态转移,每次j更新都获取距离当前子集最近的i的子集(这是枚举子集的模板方法,记下来)

2025-05-31 08:54:39 430

原创 Leetcode 2819. 购买巧克力后的最小相对损失

那么对于中间长度为n-m的滑动窗口的和val=sum(losses[x+1,...,x+n-m])就是先递增后递减的,只要找到val的最大值,就找到了最小损失值。2.1.构建losses数组,如果prices[i]<=k,losses[i]=prices[i];如果prices[i]>k,losses[i]=k-(prices[i]-k)=2*k-prices[i];返回一个整数数组 ans,其中 ans[i] 是 Bob 在 queries[i] 中可能的 最小相对损失。

2025-05-31 08:53:09 303

原创 Leetcode 3231. 要删除的递增子序列的最小数量

第二步,循环遍历nums,得到nums[i]。如果nums[i]<=arr[-1],将nums[i]添加到arr最后面;否则,将nums[i]插入到arr中,替换第一个小于nums[i]的元素arr[j]arr[i]维护长度为i的最长非严格递减子序列的最后一个元素的最大值;由于后续的arr尾部插入和二分插入的操作可知,arr一定是非严格单调递减的的。您的任务是找到使数组为 空 所需的 最小 操作数。题目转换:等价于求最长非严格递减子序列的长度。第三步,最终的len(arr)-1即为题解。

2025-05-31 08:43:54 244

原创 Leetcode LCR 187. 破冰游戏

对于第一次删除后的元素序列0,1,2,...,t-2,t,...,n-1,将t,...,n-1的子序列移动到前面,得到序列t,...,n-1,0,1,2,...,t-2,记该序列为arr1;将arr1的每个元素加上(n-t)并对n取模,得到序列0,1,...,n-t-1,n-t,...,n-2,记该序列为arr2,可以观察到arr2就是一个f(n-1,m)子问题的对应序列;所以就有递推式:f(n,m)=(f(n-1,m)+t)%n=(f(n-1,m)+m)%n;假设f(n,m)为上面的(n,m)问题的解;

2025-05-31 08:42:35 420

原创 Leetcode 2005. 斐波那契树的移除子树游戏

Alice 和 Bob 在玩一种关于斐波那契树的游戏,由 Alice 先手。在每个回合中,每个玩家选择一个节点,然后移除该节点及其子树。给定一个整数 n,假定两名玩家都按最优策略进行游戏,若 Alice 赢得这场游戏,返回 true。order(n) 是一棵根节点的左子树为 order(n - 2) 、右子树为 order(n - 1) 的二叉树。一棵二叉树的子树 tree 是由 tree 中某个节点及其所有后代节点组成的树。order(1) 是一棵只有一个节点的二叉树。order(0) 是空树。

2025-05-30 08:58:49 232

原创 Leetcode 340. 至多包含 K 个不同字符的最长子串

第一步,构建维护变量。left,right俩指针维护一个滑动窗口;map_维护滑动窗口中每个字符的最右侧的字符串的索引;currentLength维护当前的不同字符子串的长度。给你一个字符串 s 和一个整数 k ,请你找出 至多 包含 k 个 不同 字符的最长子串,并返回该子串的长度。第二步,滑动窗口进行滑动,更新currentLength和maxLength。

2025-05-30 08:56:54 296

原创 Leetcode 159. 至多包含两个不同字符的最长子串

第一步,定义维护变量。left和right为滑动窗口的左右指针;map_记录子串中单字符最右端的索引位置。给你一个字符串 s ,请你找出 至多 包含 两个不同字符 的最长子串,并返回该子串的长度。第二步,滑动窗口进行滑动,更新maxLength。2.1.删除map_中最左边的字符映射。2.3.更新maxLength。2.2.重置left指针。

2025-05-29 11:07:30 280

原创 Leetcode 2921. 价格递增的最大利润三元组 II

第二步,使用树状数组,一边添加元素,一边计算单边最大值,构建larr和rarr数组,分别维护i处左边更小价格对应最大利润,i处右边更大价格对应的最大利润。第二步,使用线段树,一边添加元素,一边计算单边最大值,构建larr和rarr数组,分别维护i处左边更小价格对应最大利润,i处右边更大价格对应的最大利润。第一步,构建两个树状数组,treeArr1维护左边更小价格对应利润的最大值,treeArr1维护右边更大价格对应利润的最大值。第三步,根据larr和rarr和profits数组提取题解。

2025-05-29 11:05:26 415

原创 常用算法模板函数(Python)

【代码】常用算法模板函数(Python)

2025-05-28 15:20:37 1172

原创 Leetcode 323. 无向图中连通分量的数目

你有一个包含 n 个节点的图。给定一个整数 n 和一个数组 edges ,其中 edges[i] = [ai, bi] 表示图中 ai 和 bi 之间有一条边。第一步,构建维护变量。使用rootDict记录各个节点归属的集合的根节点。第二步,构建并查集中用于寻找到节点x所在集合的根节点的函数。第二步,构建维护变量。使用visited记录已经遍历过的点。第三步,遍历所有的边,根据并查集求联通分量个数。第三步,通过DFS计算连通分量的个数。返回 图中已连接分量的数目。第一步,使用邻接表构建无向图。

2025-05-28 09:17:02 816

原创 Linux常用命令

本文整理了Linux系统中高频使用的命令,涵盖等场景,帮助开发者快速掌握核心技巧。

2025-05-27 13:45:00 301

原创 Leetcode 25. K 个一组翻转链表

第一步,构建维护变量。dumbNode为哑结点;tail维护新链表的尾部结点;node1和node2维护分段链表的首尾结点(node2可能为None)k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。第二步,移动结点node1和node2,分段进行翻转,并将翻转后的链表链接到tail上。给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

2025-05-27 09:12:20 672

原创 Leetcode 1635. Hopper 公司查询 I

该表的每一行均包含行程ID(ride_id),用户ID(user_id)以及该行程的日期(requested_at)。第三步,将Rides和AcceptedRides通过ride_id连接起来,过滤出成功接收的记录,并统计各个月份数量。返回按month 升序排列的结果表,其中month 是月份的数字(一月是1,二月是2,依此类推)。driver_id 是该表的主键(具有唯一值的列)。ride_id 是该表的主键(具有唯一值的列)。ride_id 是该表的主键(具有唯一值的列)。表: Drivers。

2025-05-27 09:06:45 367

原创 Leetcode 1924. 安装栅栏 II

3.2.如果当前结点i不在(center,r2)最小圆中,则将i结点作为圆心(初始半径为0),在保证结点i在最小圆的边上的情况下,枚举i前面的结点的两两组合(双层循环),记两个结点为j和k,并进行最小圆。3.1.假设当前的最小圆为(center,r2),枚举当前结点,如果当前结点i在(center,r2)圆内,不用继续剩下的二层循环,直接跳到下一个结点。正式地说,你需要求出栅栏的圆心坐标 (x,y) 和半径 r,使花园中所有的树都在圆的内部或边界上,并且让半径 r 最小。第二步,构建维护变量。

2025-05-26 10:06:41 702

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

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-05-26 10:04:55 377

原创 Leetcode 1067. 范围内的数字计数

递归函数任务:在填充数字的i位置时,此时的数字前缀中d的个数为cnt,isNum代表前缀数是否非空,isLimit代表前缀数是否被num限制,在此条件下,返回后续所有填充构成的可能数中数字d的个数。给定一个在 0 到 9 之间的整数 d,和两个正整数 low 和 high 分别作为上下界。返回 d 在 low 和 high 之间的整数中出现的次数,包括边界 low 和 high。

2025-05-26 08:57:45 210

原创 Leetcode 587. 安装栅栏

逆序枚举nodes[:i-1],对于没有访问过的结点,在stack长度大于等于凸包下半部分长度时,且stack[-1]->nodes[i]的向量在stack[-2]->stack[-1]向量的右边时(叉积判断),不断循环从stack中弹出结点;第六步,正序枚举nodes[1:],在stack长度大于等于2,且stack[-1]->nodes[i]的向量在stack[-2]->stack[-1]向量的右边时(叉积判断),不断循环从stack中弹出结点;p维护最后找到的一个凸包结点在nodes中的位置。

2025-05-25 18:42:53 650

原创 Leetcode 3269. 构建两个递增数组

dp[i][j][0]=NEXT_VALUE(min(dp[i-1][j]),nums1[i-1]),dp[i][j]=NEXT_VALUE(min(dp[i][j-1]),nums2[j-1])(其中NEXT_VALUE在已知前一个最大值和当前num的情况下,获取下一个需要填的最小值)默认为inf,dp[0][0]=[0,0],dp[0][j][1]=NEXT(nums2[:j]),dp[i][0][0]=NEXT(nums1[:i])(其中NEXT函数功能为求单数组合法填写到最后的最小最大值)

2025-05-25 11:23:26 459

原创 Leetcode 1651. Hopper 公司查询 III

编写一个解决方案,计算出从 2020 年 1 月至 3 月 至 2020 年 10 月至 12 月 的每三个月窗口的 average_ride_distance 和 average_ride_duration。并将 average_ride_distance 和 average_ride_duration 四舍五入至 小数点后两位。该表的每一行均包含行程 ID(ride_id),用户 ID(user_id) 以及该行程的日期(requested_at)。ride_id 是该表具有唯一值的列。

2025-05-25 08:31:38 722

原创 Leetcode 3103. 查找热门话题标签 II

编写一个解决方案来找到 2024 年 二月 的 前 3 热门话题 标签。一条推文可能含有 多个标签。这张表的每一行都包含 user_id, tweet_id, tweet_date 和 tweet。题目保证所有 tweet_date 都是 2024 年 2 月的合法日期。tweet_id 是这张表的主键 (值互不相同的列)。返回结果表,根据标签的数量和名称 降序 排序。1.1.获取推特中的第一个标签(递归初始化)第二步,统计各个标签的id数量,并取前三个。第一步,递归的从tweet中提取标签。

2025-05-25 08:29:46 448

原创 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 357

原创 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 225

原创 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 445

原创 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 292

原创 Leetcode 1522. N 叉树的直径

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

2025-05-22 23:07:59 443

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

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

2025-05-22 10:12:28 230

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

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

2025-05-22 09:57:31 276

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

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 1723

原创 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 308

空空如也

空空如也

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

TA关注的人

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