自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode每日一题 | LCP 30. 魔塔游戏

假定小扣原计划按房间编号升序访问所有房间补血/打怪,为保证血量始终为正值,小扣需对房间访问顺序进行调整,每次仅能将一个怪物房间(负数的房间)调整至访问顺序末尾。请返回小扣最少需要调整几次,才能顺利访问所有房间。每个房间的补血道具/怪物对于血量影响记于数组 nums,其中正数表示道具补血数值,即血量增加对应数值;当访问到第 i 个房间,当前的血量值不为正数,说明需要将一个怪物房间(负数的房间)调整至访问顺序末尾。而为了确保调整次数最少,则需要用一个小顶堆,维护当前数值最小的怪物房间,并将其调整至顺序末尾。

2024-02-06 23:29:22 465

原创 LeetCode每日一题 | 1696. 跳跃游戏 VI

一开始你在下标 0 处。每一步,你最多可以往前跳 k 步,但你不能跳出数组的边界。也就是说,你可以从下标 i 跳到 [i + 1, min(n - 1, i + k)] 包含 两个端点的任意位置。你的目标是到达数组最后一个位置(下标为 n - 1 ),你的 得分 为经过的所有数字之和。给你一个下标从 0 开始的整数数组 nums 和一个整数 k。其中前 k 步的最大值,可以用一个双端队列进行维护。请你返回你能得到的 最大得分。表示到达位置 i 的最大得分。

2024-02-05 23:59:28 420

原创 Nim游戏

给定 n 堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。第二行包含 n 个数字,其中第 i 个数字表示第 i 堆石子的数量。问如果两人都采用最优策略,先手是否必胜。如果先手方必胜,则输出 Yes。假设 n 堆石子,石子数目分别是。第一行包含整数 n。

2024-02-04 23:13:55 447

原创 LeetCode每日一题 | 1690. 石子游戏 VII

石子游戏中,爱丽丝和鲍勃轮流进行自己的回合,爱丽丝先开始 。有 n 块石子排成一排。每个玩家的回合中,可以从行中 移除 最左边的石头或最右边的石头,并获得与该行中剩余石头值之 和 相等的得分。当没有石头可移除时,得分较高者获胜。鲍勃发现他总是输掉游戏(可怜的鲍勃,他总是输),所以他决定尽力 减小得分的差值 。爱丽丝的目标是最大限度地 扩大得分的差值 。给你一个整数数组 stones ,其中 stones[i] 表示 从左边开始 的第 i 个石头的值,如果爱丽丝和鲍勃都 发挥出最佳水平 ,请返回他们 得分的差

2024-02-03 22:30:59 487

原创 LeetCode每日一题 | 1686. 石子游戏 VI

个石子,轮到某个玩家时,他可以 移出 一个石子并得到这个石子的价值。Alice 和 Bob 对石子价值有 不一样的的评判标准。所有石子都被取完后,得分较高的人为胜者。值从大到小进行排序, Alice 和 Bob 依次选择,就是最终的结果。Alice 和 Bob 轮流玩一个游戏,Alice 先手。即 Alice 和 Bob 采用的最优策略都是先选择。对比两种方案的优劣,可以对这两种方案的价值做差,即。,则 Alice 与 Bob 之间的石子价值差为。,则 Alice 与 Bob 之间的石子价值差为。

2024-02-02 23:03:05 513

原创 耍杂技的牛

【代码】耍杂技的牛。

2024-02-02 00:00:13 298

原创 LeetCode每日一题 | 2670. 找出不同元素数目差数组

可以先进行一次遍历,用哈希表存储数组中每个元素的个数。然后第二遍遍历计算前缀和后缀只差。的 不同元素数目差 数组可以用一个长度为。特别需要说明的是,如果。中不同元素的数目 减去 后缀。的 不同元素数目差 数组。结束的子数组(包含下标。

2024-01-31 00:22:12 317

原创 LeetCode每日一题 | 2808. 使循环数组所有元素相等的最少秒数

因此,我们可以用一个哈希 map 存储相同元素的所有下标,然后计算相邻坐标之间的差值,得到全局的最大距离最小。仔细观察可以发现,这道题可以转为求循环数组中,相同元素x,之间邻接的最大距离最小。请你返回将数组 nums 中所有元素变成相等元素所需要的。给你一个下标从 0 开始长度为 n 的数组 nums。,所有元素会被同时替换。

2024-01-30 00:25:04 324

原创 数论 | 容斥原理

∣S1∪S2∪S3∣=∣S1∣+∣S2∣+∣S3∣−∣S1∩S2∣−∣S1∩S2∣−∣S1∩S3∣−∣S2∩S3∣+∣S1∩S2∩S3∣|S_1 ∪ S_2 ∪ S_3| = |S_1|+|S_2|+|S_3|-|S_1∩S_2|-|S_1∩S_2|-|S_1∩S_3|-|S_2∩S_3|+|S_1∩S_2∩S_3|∣S1​∪S2​∪S3​∣=∣S1​∣+∣S2​∣+∣S3​∣−∣S1​∩S2​∣−∣S1​∩S2​∣−∣S1​∩S3​∣−∣S2​∩S3​∣+∣S1​∩S2​∩S3​∣时间复杂度:O(2n)O

2024-01-27 23:49:11 996

原创 数论 | 质数

【代码】数论 | 质数。

2024-01-24 22:38:20 894

原创 LeetCode每日一题 | 670. 最大交换

因此,我们只需要从右往左遍历(从个位开始),遍历过程中,记录右边数字的最大值。然后判断当前值是否比右边数字的最大值要小,若符合则交换这两个数,则可使交换后的数比原数要大。给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。交换一次数字中的任意两位。

2024-01-22 22:35:31 560

原创 KMP 算法

next 数组的求法是通过模板串自己与自己进行匹配操作得出来的。这样可以避免重复比较已经匹配的部分,提高效率。字符串的第一个匹配项的下标(下标从 0 开始)。这个子串的最长相同前后缀的长度。的某个字符不匹配,那么我们可以将。

2024-01-21 00:20:46 371

原创 岛屿问题(下)

为了方便实现并查集,将二维坐标转换为一维上的点,计算公式为。(代表土地) 构成的组合,这里的「相邻」要求两个。如果没有岛屿,则返回面积为。由一组上、下、左、右四个方向相连的。最后,对所有连通块大小取最大值。中最大的岛屿面积是多少?岛屿的面积是岛上值为。

2024-01-20 01:18:55 866

原创 岛屿问题(上)

岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100。计算这个岛屿的周长。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。(水)组成的的二维网格,请你计算网格中岛屿的数量。此外,你可以假设该网格的四条边均被水包围。中,每块子岛屿的模块是否都属于。中该岛屿的每一个格子都被。中的同一个连通分量。

2024-01-18 23:18:55 406

原创 计算几何 | 凸包 | Andrew 算法

下一个点若在栈顶边的左侧,则弹出栈顶的边;若下一个点在栈顶边的右侧,则保留栈顶的边,将新的边压入栈中;若下一个点在栈顶边的延长线上,按照题意,弹出栈顶的边,将新的边压入栈中。最后记得将两个边界点更新一下栈。

2024-01-14 23:53:12 415

原创 最小生成树 | Prim 算法

每次将离连通部分的最近的点和点对应的边加入的连通部分,连通部分逐渐扩大,最后将整个图连通起来,并且边长之和最小。

2024-01-13 23:20:08 404

原创 基本数据结构 | 并查集

合并两个集合查询某个元素的祖宗节点OlognO(logn)OlognOlognO(logn)Ologn,代码比较复杂,一般不单独用两种优化结合起来用,时间复杂度可以压缩到OαnOαn))

2024-01-12 17:41:18 383

原创 LeetCode每日一题 | 2645. 构造有效字符串的最少插入数

给你一个字符串 word ,你可以向其中任何位置插入 “a”、“b” 或 “c” 任意次,返回使 word 有效 需要插入的最少字母数。剩余部分就是简单模拟(LeetCode最近的每日一题怎么都这么水,2333)如果字符串可以由 “abc” 串联多次得到,则认为该字符串有效。

2024-01-11 23:45:05 441

原创 LeetCode每日一题 | 2696. 删除子串后的字符串最小长度

观察删除和拼接的规律,可以发现可以使用栈进行模拟,即通过将元素弹出栈来模拟删除的过程。你可以对此字符串执行一些操作,在每一步操作中,你可以从 s 中删除 任一个 “AB” 或 “CD” 子字符串。通过执行操作,删除所有 “AB” 和 “CD” 子串,返回可获得的最终字符串的 最小 可能长度。注意,删除子串后,重新连接出的字符串可能会产生新的 “AB” 或 “CD” 子串。由于题目要求删除所有"AB"和“CD”子串,并将字符串重新拼接。将字符串全部遍历结束后,栈内元素就是最终字符串的最小可能长度。

2024-01-10 21:23:27 375

原创 LeetCode每日一题 | 2707. 字符串中的额外字符

给你一个下标从 0 开始的字符串 s 和一个单词字典 dictionary 。你需要将 s 分割成若干个 互不重叠 的子字符串,每个子字符串都在 dictionary 中出现过。s 中可能会有一些 额外的字符 不在任何子字符串中。请你采取最优策略分割 s ,使剩下的字符 最少 。仔细观察这道题可以发现,可以转化成背包问题。状态定义:表示的所有分割策略中,剩下字符的最小值。状态计算:遍历单词字典中的所有字符串(看成物品),若字典中字符串的长度小于等于字符串(物品体积小于背包体积),则计算分割出该字符串是否能使

2024-01-09 21:32:33 511

原创 LeetCode每日一题 | 383. 赎金信

在相邻结点之间,请你插入一个新的结点,结点值为这两个相邻结点值的。剩下的部分就是简单的链表遍历以及插入新结点的问题。是可以被两个数字整除的最大正整数。,每个结点包含一个整数值。请你返回插入之后的链表。

2024-01-07 21:00:32 754

原创 LeetCode每日一题 | 2807. 在链表中插入最大公约数

在相邻结点之间,请你插入一个新的结点,结点值为这两个相邻结点值的。剩下的部分就是简单的链表遍历以及插入新结点的问题。是可以被两个数字整除的最大正整数。,每个结点包含一个整数值。请你返回插入之后的链表。

2024-01-06 22:33:53 652

原创 LeetCode每日一题 | 1944. 队列中可以看到的人数

他右边另一个人的条件是这两人之间的所有人都比他们两人。最后,判断此时栈是否为空,若不为空,要再加上。右边所可能看到的对象(单调递增的序列)。挡住了后面所有的人,则信息蕴含在。记遍历过程中,当前要研究的对象为。所能看到的最后一个人,即第一个比。个人在他右侧队列中能。

2024-01-05 19:35:37 654

原创 LeetCode每日一题 | 2397. 被列覆盖的最多行数

对于满足 matrix[row][col] == 1 的每个单元格 matrix[row][col](0

2024-01-04 22:34:10 569

原创 LeetCode每日一题 | 2487.从链表中移除节点

返回修改后链表的头节点 head。给你一个链表的头节点 head。移除每个右侧有一个更大数值的节点。

2024-01-03 20:40:20 394

原创 LeetCode-2008. 出租车的最大盈利

你驾驶出租车行驶在一条有 个地点的路上。这 个地点从近到远编号为 到 ,你想要从 开到 ,通过接乘客订单盈利。你只能沿着编号递增的方向前进,不能改变方向。乘客信息用一个下标从 0 开始的二维数组 表示,其中 表示第 位乘客需要从地点 前往 ,愿意支付 元的小费。每一位 你选择接单的乘客 ,你可以 盈利 元。你同时 最多 只能接一个订单。给你 和 ,请你返回在最优接单方案下,你能盈利 最多 多少元。注意:你可以在一个地点放下一位乘客,并在同一个地点接上另一位乘客。预处理:将所有

2024-01-02 17:18:15 396

原创 动态规划 | 最长公共子序列问题

给定两个字符串 和 ,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。这里假设和的下标均从 1 开始状态定义:表示和的最长公共子序列的长度状态划分:根据和是否在最长公共子序列中,可以将状态划分为四类由于情况 4 包含在情况 2 和情况 3 中,因此不需要要单独考虑,最终可以

2024-01-01 23:03:46 1023

原创 动态规划 | 鸡蛋问题 | 元旦假期来点“蛋”题

给你 2 枚相同 的鸡蛋,和一栋从第 层到第 层共有 层楼的建筑。已知存在楼层 ,满足 ,任何从 高于 的楼层落下的鸡蛋都 会碎 ,从 楼层或比它低 的楼层落下的鸡蛋都 不会碎 。每次操作,你可以取一枚 没有碎 的鸡蛋并把它从任一楼层 扔下(满足 )。如果鸡蛋碎了,你就不能再次使用它。如果某枚鸡蛋扔下后没有摔碎,则可以在之后的操作中 重复使用 这枚鸡蛋。请你计算并返回要确定 确切的值 的 最小操作次数 是多少?状态定义:表示总共有 i 层楼,现在手上有 j + 1 个鸡蛋。状态计算:我们假

2023-12-30 21:38:17 453

原创 最短路问题 | 单源最短路 | 条条大路通罗马,有人生来在罗马

简单最短路径问题:如果 i 到 j 的最短路经过 w,那么从 i 到 j 的最短距离一定为从 i 到 w 的最短距离加上从 w 到 j 的最短距离。表示节点 i 到起点的最短距离。初始置,。集合 s 用于存储当前已确定最短距离的点。从1到 n 开始遍历(代表加入 s 的结点个数),找不在 s 中距离最短的点 t,更新最短距离,然后吧节点 t 加入集合 s 中。堆优化版Bellman - ford算法特点如果有负权边的话,最短路不一定存在状态定义:表示经过 k 条边(该变量是隐含的),从

2023-12-29 17:25:51 844

原创 LeetCode-827. 最大人工岛

为了方便实现并查集,将二维坐标转换为一维上的点,计算公式为。由一组上、下、左、右四个方向相连的。最后,对所有连通块大小取最大值。中最大的岛屿面积是多少?

2023-12-28 20:55:23 575

原创 快速排序回顾及相关题型

这里先假设数组下标从 1 开始,后续程序实现时可以通过 k - 1 来对齐下标从 0 开始的数组。设计一个算法,找出数组中最小的k个数。:递归调用左右两个区间,对左右两个区间进行快速排序。将所有的数按照此法分成左右两个区间。:对于快速排序,合并操作无需单独进行。,证明比较繁琐,可以参考《算法导论》请注意,你需要找的是数组排序后的第。,证明比较繁琐,可以参考《算法导论》个最大的元素,而不是第。:合并操作无需单独进行。:合并操作无需单独进行。的右边,并得到基准元素。的右边,并得到基准元素。

2023-12-27 15:05:24 938 3

原创 递推与递归

当最后一层的操作进行完毕,前面层数的灯一定处于全亮状态,只需关注最后一层是否全亮。若最后一层没有全亮,则说明,对于该第一层的开关操作,最终无法得出所有灯全亮的操作。对于这道题,比较容易想到的是利用 BFS,从目标状态(所有灯都亮)开始,搜索经过 6 步“拉灯”所能到达的所有状态,判断初始状态是否包括在内。一共输出 n 行数据,每行有一个小于等于 66 的整数,它表示对于输入数据中对应的游戏状态最少需要几步才能使所有灯变亮。对于每一种的第一层开关操作,我们都可以通过上述方式,判断最终是否能得到灯全亮的状态。

2023-12-26 21:20:42 954

原创 动态规划系列 | 最长上升子序列模型(下)| 拦截导弹一网打尽!

输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数,导弹数不超过1000),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。对于这道题,没有很好的解法,只能通过暴力搜索,即考虑每个数是放在上升子序列或者下降子序列中,然后搜索全局最小值。例如,一套系统先后拦截了高度为 3 和高度为 4 的两发导弹,那么接下来该系统就只能拦截高度大于 4 的导弹。搜索过程中,可以判断当前子序列的个数是否超过了当前的最优解,若超过则进行剪枝操作,减小搜索空间。

2023-12-25 16:25:25 942

原创 动态规划系列 | 最长上升子序列模型(上)

五一到了,ACM队组织大家去登山观光,队员们发现山上一共有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。有一天,怪盗基德像往常一样偷走了一颗珍贵的钻石,不料却被柯南小朋友识破了伪装,而他的滑翔翼的动力装置也被柯南踢出的足球破坏了。你的任务是,已知所有 N 位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。以南岸的城市为基准,我们可以发现,对于任意一种建桥的可行方案,北岸的城市位置都是严格单调递增的。,K,他们的身高分别为。

2023-12-24 22:16:09 1002

原创 动态规划 | 乘积最大

今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰 90 周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友 XZ 也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目:设有一个长度为 NNN 的数字串,要求选手使用 KKK 个乘号将它分成 K+1K+1K+1 个部分,找出一种分法,使得这 K+1K+1K+1 个部分的乘积能够为最大。同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子:有一个数字串:31231

2023-12-24 00:47:36 1013

原创 动态规划 | 数字三角形模型 | 类似题型一网打尽

给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。设有 N×N 的方格图,我们在其中的某些方格中填入正整数,而其它的方格中则放入数字0。某人从图中的左上角 A 出发,可以向下行走,也可以向右行走,直到到达右下角的 B 点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。

2023-12-22 21:16:44 864

原创 图论 | 网络流的基本概念

只需要再证明最大流大于等于最小割,就可以推出最大流等于最小割。是最大流,而它的残留网络存在增广路,则有。将 EK 算法中的 BFS 换成 SPFA。残留网络定义:一个可行流流网络。不是最大流,与原假设矛盾。最小割一定某个割,即。

2023-12-21 21:31:01 2602

原创 动态规划系列 | 一文搞定区间DP

因为只有这样,通过吸盘(吸盘是 Mars 人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。前面我们已经考虑了线性区间的石子合并问题,仔细观察环形区间的石子合并问题,可以发现将两个石子合并,可以看作在两个石子之间连一条边。显然,不同的聚合顺序得到的总能量是不同的,请你设计一个聚合顺序,使一串项链释放出的总能量最大。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。

2023-12-20 19:22:36 1011

原创 LeetCode-28. 找到字符串中第一个匹配项的下标

next 数组的求法是通过模板串自己与自己进行匹配操作得出来的。这样可以避免重复比较已经匹配的部分,提高效率。字符串的第一个匹配项的下标(下标从 0 开始)。这个子串的最长相同前后缀的长度。的某个字符不匹配,那么我们可以将。

2023-12-19 20:53:40 422

原创 分治算法 | 归并专题

合并过程:每次取左右区间当前最小的数进行比较,较小的数加入临时数组中。猫猫 TOM 和小老鼠 JERRY 最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计。最近,TOM 老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定义的:对于给定的一段正整数序列,逆序对就是序列中。知道这概念后,他们就比赛谁先算出给定的一段正整数序列中逆序对的数目。由于需要按照原数组的顺序,返回每个元素右侧小于该元素的数量,因此可以用一个。的元素的数量,其实就是计算与。

2023-12-18 17:29:58 839

空空如也

空空如也

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

TA关注的人

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