- 博客(971)
- 资源 (86)
- 收藏
- 关注
原创 【对顶队列】【中位数贪心】【前缀和】100227. 拾起 K 个 1 需要的最少行动次数
给你一个下标从 0 开始的二进制数组 nums,其长度为 n ;另给你一个 正整数 k 以及一个 非负整数 maxChanges 。灵茶山艾府在玩一个游戏,游戏的目标是让灵茶山艾府使用 最少 数量的 行动 次数从 nums 中拾起 k 个 1 。游戏开始时,灵茶山艾府可以选择数组 [0, n - 1] 范围内的任何索引index 站立。如果 nums[index] == 1 ,灵茶山艾府就会拾起一个 1 ,并且 nums[index] 变成0(这 不算 作一次行动)。之后,灵茶山艾府可以执行 任意数量 的
2024-03-18 07:00:00 853 34
原创 割点原理及封装好的割点类
**性质一**: 搜索树上的两点连通,则对应的图一定连通。因为:搜索树有的边,对应的图都有。**性质二**:搜索树上,假定一个节点n1有m个子节点,则删除n1和相关边后,有1+m个连通区域。各子节点各一个连通区域,其它节点一个连通区域(简称根子树)。根据性质一,对应的图最多1+m个连通区域。**性质三**:dfs(c1)前,c1到c10的某条路径全部是未访问节点,则dfs(c1)时一定会访问c10。令在这条路径上:c1的后继点是c2,c2是c3,c3是c4 $\cdots$第一次处理c1时,c1处理
2024-03-11 07:00:00 2860 44
原创 动态规划汇总
动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。
2024-01-20 17:00:00 1165 12
原创 【模拟】【C++算法】2826. 将三个组排序
给你一个下标从 0 开始长度为 n 的整数数组 nums 。从 0 到 n - 1 的数字被分为编号从 1 到 3 的三个组,数字 i 属于组 nums[i] 。注意,有的组可能是 空的 。你可以执行以下操作任意次:选择数字 x 并改变它的组。更正式的,你可以将 nums[x] 改为数字 1 到 3 中的任意一个。你将按照以下过程构建一个新的数组 res :将每个组中的数字分别排序。将组 1 ,2 和 3 中的元素 依次 连接以得到 res 。如果得到的 res 是 非递减顺序的,那么我们称数
2024-03-19 07:00:00 742 8
原创 【前缀和】100255. 成为 K 特殊字符串需要删除的最少字符数
给你一个字符串 word 和一个整数 k。如果 |freq(word[i]) - freq(word[j])|
2024-03-18 17:00:00 474 8
原创 【二分查找】【键值皆有序】1840最高建筑高度
在一座城市里,你需要建 n 栋新的建筑。这些新的建筑会从 1 到 n 编号排成一列。这座城市对这些新建筑有一些规定:每栋建筑的高度必须是一个非负整数。第一栋建筑的高度 必须 是 0 。任意两栋相邻建筑的高度差 不能超过 1 。除此以外,某些建筑还有额外的最高高度限制。这些限制会以二维整数数组 restrictions 的形式给出,其中 restrictions[i] = [idi, maxHeighti] ,表示建筑 idi 的高度 不能超过 maxHeighti 。题目保证每栋建筑在 res
2024-03-16 17:00:00 742 1
原创 【数学】【数论】【最大公约数】1819. 序列中不同最大公约数的数目
给你一个由正整数组成的数组 nums 。数字序列的 最大公约数 定义为序列中所有整数的共有约数中的最大整数。
2024-03-16 07:00:00 1558 3
原创 【数学】【计算几何】1453. 圆形靶内的最大飞镖数量
Alice 向一面非常大的墙上掷出 n 支飞镖。给你一个数组 darts ,其中 darts[i] = [xi, yi] 表示 Alice 掷出的第 i 支飞镖落在墙上的位置。Bob 知道墙上所有 n 支飞镖的位置。他想要往墙上放置一个半径为 r 的圆形靶。使 Alice 掷出的飞镖尽可能多地落在靶上。给你整数 r ,请返回能够落在 任意 半径为 r 的圆形靶内或靶上的最大飞镖数。
2024-03-15 07:00:00 787 4
原创 【数学】【位运算】LeetCoce810. 黑板异或游戏
黑板上写着一个非负整数数组 nums[i] 。Alice 和 Bob 轮流从黑板上擦掉一个数字,Alice 先手。如果擦除一个数字后,剩余的所有数字按位异或运算得出的结果等于 0 的话,当前玩家游戏失败。 另外,如果只剩一个数字,按位异或运算得到它本身;如果无数字剩余,按位异或运算结果为 0。并且,轮到某个玩家时,如果当前黑板上所有数字按位异或运算结果等于 0 ,这个玩家获胜。假设两个玩家每步都使用最优解,当且仅当 Alice 获胜时返回 true。
2024-03-14 17:00:00 710
原创 【哈希映射】【 哈希集合】 381. O(1) 时间插入、删除和获取随机元素 - 允许重复
RandomizedCollection 是一种包含数字集合(可能是重复的)的数据结构。它应该支持插入和删除特定元素,以及删除随机元素。实现 RandomizedCollection 类:RandomizedCollection()初始化空的 RandomizedCollection 对象。bool insert(int val) 将一个 val 项插入到集合中,即使该项已经存在。如果该项不存在,则返回 true ,否则返回 false 。bool remove(int val) 如果存在,从集合中
2024-03-14 07:00:00 914 41
原创 【数学】【C++算法】780. 到达终点
给定四个整数 sx , sy ,tx 和 ty,如果通过一系列的转换可以从起点 (sx, sy) 到达终点 (tx, ty),则返回 true,否则返回 false。从点 (x, y) 可以转换到 (x, x+y) 或者 (x+y, y)。
2024-03-13 17:00:00 822 2
原创 【位运算】【脑筋急转弯】2749. 得到整数零需要执行的最少操作数
给你两个整数:num1 和 num2 。在一步操作中,你需要从范围 [0, 60] 中选出一个整数 i ,并从 num1 减去 2i + num2 。请你计算,要想使 num1 等于 0 需要执行的最少操作数,并以整数形式返回。如果无法使 num1 等于 0 ,返回 -1 。
2024-03-13 07:00:00 1006 4
原创 【字典树】 【哈希表】 【字符串】100251. 数组中的最短非公共子字符串
给你一个数组 arr ,数组中有 n 个 非空 字符串。请你求出一个长度为 n 的字符串 answer ,满足:answer[i] 是 arr[i] 最短 的子字符串,且它不是 arr 中其他任何字符串的子字符串。如果有多个这样的子字符串存在,answer[i] 应该是它们中字典序最小的一个。如果不存在这样的子字符串,answer[i] 为空字符串。请你返回数组 answer 。
2024-03-12 17:48:00 1046 18
原创 【数学】【网格】【状态压缩】782 变为棋盘
# LeetCode:782 变为棋盘一个 n x n 的二维网络 board 仅由 0 和 1 组成 。每次移动,你能任意交换两列或是两行的位置。返回 将这个矩阵变为 “棋盘” 所需的最小移动次数 。如果不存在可行的变换,输出 -1。“棋盘” 是指任意一格的上下左右四个方向的值均与本身不同的矩阵。
2024-03-12 17:00:00 870
原创 【图论】 【割点】 【双连通分类】LCP 54. 夺回据点
魔物了占领若干据点,这些据点被若干条道路相连接,roads[i] = [x, y] 表示编号 x、y 的两个据点通过一条道路连接。现在勇者要将按照以下原则将这些据点逐一夺回:在开始的时候,勇者可以花费资源先夺回一些据点,初始夺回第 j 个据点所需消耗的资源数量为 cost[j]接下来,勇者在不消耗资源情况下,每次可以夺回一个和「已夺回据点」相连接的魔物据点,并对其进行夺回注:为了防止魔物暴动,勇者在每一次夺回据点后(包括花费资源夺回据点后),需要保证剩余的所有魔物据点之间是相连通的(不经过「已夺回据
2024-03-11 12:27:05 1144 12
原创 【动态规划】【前缀和】【和式变换】100216. K 个不相交子数组的最大能量值
给你一个长度为 n 下标从 0 开始的整数数组 nums 和一个 正奇数 整数 k 。x 个子数组的能量值定义为 strength = sum[1] * x - sum[2] * (x - 1) + sum[3] * (x - 2) - sum[4] * (x - 3) + ... + sum[x] * 1 ,其中 sum[i] 是第 i 个子数组的和。更正式的,能量值是满足 1
2024-03-10 14:44:54 1445 20
原创 【数学】【组合数学】1830. 使字符串有序的最少操作次数
给你一个字符串 s (下标从 0 开始)。你需要对 s 执行以下操作直到它变为一个有序字符串:找到 最大下标 i ,使得 1
2024-03-10 07:00:00 601 4
原创 【字符串】【贪心】【 树状数组】2193. 得到回文串的最少操作次数
给你一个只包含小写英文字母的字符串 s 。每一次 操作 ,你可以选择 s 中两个 相邻 的字符,并将它们交换。请你返回将 s 变成回文串的 最少操作次数 。注意 ,输入数据会确保 s 一定能变成一个回文串。
2024-03-09 17:00:00 931 4
原创 【字符串】【分类讨论】【KMP】1163. 按字典序排在最后的子串
给你一个字符串 s ,找出它的所有子串并按字典序排列,返回排在最后的那个子串。
2024-03-09 07:00:00 710 3
原创 【广度优先搜索】【二分图】【并集查找】2493. 将节点分成尽可能多的组
给你一个正整数 n ,表示一个 无向 图中的节点数目,节点编号从 1 到 n 。同时给你一个二维整数数组 edges ,其中 edges[i] = [ai, bi] 表示节点 ai 和 bi 之间有一条 双向 边。注意给定的图可能是不连通的。请你将图划分为 m 个组(编号从 1 开始),满足以下要求:图中每个节点都只属于一个组。图中每条边连接的两个点 [ai, bi] ,如果 ai 属于编号为 x 的组,bi 属于编号为 y 的组,那么 |y - x| = 1 。请你返回最多可以将节点分为多少个组
2024-03-08 15:30:00 861 4
原创 【深度优先】【图论】【C++算法】2045. 到达目的地的第二短时间
城市用一个 双向连通 图表示,图中有 n 个节点,从 1 到 n 编号(包含 1 和 n)。图中的边用一个二维整数数组 edges 表示,其中每个 edges[i] = [ui, vi] 表示一条节点 ui 和节点 vi 之间的双向连通边。每组节点对由 最多一条 边连通,顶点不存在连接到自身的边。穿过任意一条边的时间是 time 分钟。每个节点都有一个交通信号灯,每 change 分钟改变一次,从绿色变成红色,再由红色变成绿色,循环往复。所有信号灯都 同时 改变。你可以在 任何时候 进入某个节点,但是 只
2024-03-08 07:00:00 1014 4
原创 【动态规划】【数论】【区间合并】3041. 修改数组后最大化数组中的连续元素数目
给你一个下标从 0 开始只包含 正 整数的数组 nums 。一开始,你可以将数组中 任意数量 元素增加 至多 1 。修改后,你可以从最终数组中选择 一个或者更多 元素,并确保这些元素升序排序后是 连续 的。比方说,[3, 4, 5] 是连续的,但是 [3, 4, 6] 和 [1, 1, 2, 3] 不是连续的。请你返回 最多 可以选出的元素数目。
2024-03-07 17:00:00 584
原创 【二分查找】【map]436. 寻找右区间
给你一个区间数组 intervals ,其中 intervals[i] = [starti, endi] ,且每个 starti 都 不同 。区间 i 的 右侧区间 可以记作区间 j ,并满足 startj >= endi ,且 startj 最小化 。注意 i 可能等于 j 。返回一个由每个区间 i 的 右侧区间 在 intervals 中对应下标组成的数组。如果某个区间 i 不存在对应的 右侧区间 ,则下标 i 处的值设为 -1 。
2024-03-07 17:00:00 814 2
原创 【树上倍增】【割点】 【换根法】3067. 在带权树网络中统计可连接服务器对数目
给你一棵无根带权树,树中总共有 n 个节点,分别表示 n 个服务器,服务器从 0 到 n - 1 编号。同时给你一个数组 edges ,其中 edges[i] = [ai, bi, weighti] 表示节点 ai 和 bi 之间有一条双向边,边的权值为 weighti 。再给你一个整数 signalSpeed 。如果两个服务器 a ,b 和 c 满足以下条件,那么我们称服务器 a 和 b 是通过服务器 c 可连接的 :a < b ,a != c 且 b != c 。从 c 到 a 的距离是可以被 s
2024-03-07 07:00:00 2890 70
原创 【广度优先搜索】【堆】【C++算法】407. 接雨水 II
给你一个 m x n 的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。
2024-03-06 17:00:00 1015 3
原创 【字符串】【括号匹配】【广度优先】301. 删除无效的括号
给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。返回所有可能的结果。答案可以按 任意顺序 返回。
2024-03-06 07:00:00 747 5
原创 【深度优化】【广度优先】【状态压缩】864. 获取所有钥匙的最短路径
给定一个二维网格 grid ,其中:'.' 代表一个空房间'#' 代表一堵墙'@' 是起点小写字母代表钥匙大写字母代表锁我们从起点开始出发,一次移动是指向四个基本方向之一行走一个单位空间。我们不能在网格外面行走,也无法穿过一堵墙。如果途经一个钥匙,我们就把它捡起来。除非我们手里有对应的钥匙,否则无法通过锁。假设 k 为 钥匙/锁 的个数,且满足 1
2024-03-05 17:00:00 907 1
原创 【树】【异或】【深度优先】【DFS时间戳】2322. 从树中删除边的最小分数
存在一棵无向连通树,树中有编号从 0 到 n - 1 的 n 个节点, 以及 n - 1 条边。给你一个下标从 0 开始的整数数组 nums ,长度为 n ,其中 nums[i] 表示第 i 个节点的值。另给你一个二维整数数组 edges ,长度为 n - 1 ,其中 edges[i] = [ai, bi] 表示树中存在一条位于节点 ai 和 bi 之间的边。删除树中两条 不同 的边以形成三个连通组件。对于一种删除边方案,定义如下步骤以计算其分数:分别获取三个组件 每个 组件中所有节点值的异或值。最
2024-03-05 07:00:00 980 7
原创 【树】【因子数】【数论】【深度优先搜索】2440. 创建价值相同的连通块
有一棵 n 个节点的无向树,节点编号为 0 到 n - 1 。给你一个长度为 n 下标从 0 开始的整数数组 nums ,其中 nums[i] 表示第 i 个节点的值。同时给你一个长度为 n - 1 的二维整数数组 edges ,其中 edges[i] = [ai, bi] 表示节点 ai 与 bi 之间有一条边。你可以 删除 一些边,将这棵树分成几个连通块。一个连通块的 价值 定义为这个连通块中 所有 节点 i 对应的 nums[i] 之和。你需要删除一些边,删除后得到的各个连通块的价值都相等。请返
2024-03-04 17:00:00 924
原创 【二分查找】【C++算法】378. 有序矩阵中第 K 小的元素
给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素。示例 1:输入:matrix = [[1,5,9],[10,11,13],[12,13,15]], k = 8输出:13解释:矩阵中的元素为 [1,5,9,10,11,12,13,13,15],第 8 小元素是 13示例 2:输入:matrix = [[-5]], k = 1输出:-5
2024-03-04 07:00:00 3515 154
原创 【离散化】【 树状树状 】100246 将元素分配到两个数组中
给你一个下标从 1 开始、长度为 n 的整数数组 nums 。现定义函数 greaterCount ,使得 greaterCount(arr, val) 返回数组 arr 中 严格大于 val 的元素数量。你需要使用 n 次操作,将 nums 的所有元素分配到两个数组 arr1 和 arr2 中。在第一次操作中,将 nums[1] 追加到 arr1 。在第二次操作中,将 nums[2] 追加到 arr2 。之后,在第 i 次操作中:如果 greaterCount(arr1, nums[i]) > g
2024-03-03 17:00:00 1063 6
原创 【深度优先搜索】【树】【C++算法】2003. 每棵子树内缺失的最小基因值
有一棵根节点为 0 的 家族树 ,总共包含 n 个节点,节点编号为 0 到 n - 1 。给你一个下标从 0 开始的整数数组 parents ,其中 parents[i] 是节点 i 的父节点。由于节点 0 是 根 ,所以 parents[0] == -1 。总共有 105 个基因值,每个基因值都用 闭区间 [1, 105] 中的一个整数表示。给你一个下标从 0 开始的整数数组 nums ,其中 nums[i] 是节点 i 的基因值,且基因值 互不相同 。请你返回一个数组 ans ,长度为 n ,其中
2024-03-03 07:00:00 1795 4
原创 【分类讨论】【割点】1568. 使陆地分离的最少天数
给你一个大小为 m x n ,由若干 0 和 1 组成的二维网格 grid ,其中 1 表示陆地, 0 表示水。岛屿 由水平方向或竖直方向上相邻的 1 (陆地)连接形成。如果 恰好只有一座岛屿 ,则认为陆地是 连通的 ;否则,陆地就是 分离的 。一天内,可以将 任何单个 陆地单元(1)更改为水单元(0)。返回使陆地分离的最少天数。
2024-03-02 17:00:00 837 2
原创 【图论】【并集查找】【C++算法】928. 尽量减少恶意软件的传播 II
给定一个由 n 个节点组成的网络,用 n x n 个邻接矩阵 graph 表示。在节点网络中,只有当 graph[i][j] = 1 时,节点 i 能够直接连接到另一个节点 j。一些节点 initial 最初被恶意软件感染。只要两个节点直接连接,且其中至少一个节点受到恶意软件的感染,那么两个节点都将被恶意软件感染。这种恶意软件的传播将继续,直到没有更多的节点可以被这种方式感染。假设 M(initial) 是在恶意软件停止传播之后,整个网络中感染恶意软件的最终节点数。我们可以从 initial 中删除一
2024-03-02 07:00:00 1688 3
原创 【矩阵】【方向】【素数】3044 出现频率最高的素数
给你一个大小为 m x n 、下标从 0 开始的二维矩阵 mat 。在每个单元格,你可以按以下方式生成数字:最多有 8 条路径可以选择:东,东南,南,西南,西,西北,北,东北。选择其中一条路径,沿着这个方向移动,并且将路径上的数字添加到正在形成的数字后面。注意,每一步都会生成数字,例如,如果路径上的数字是 1, 9, 1,那么在这个方向上会生成三个数字:1, 19, 191 。返回在遍历矩阵所创建的所有数字中,出现频率最高的、大于 10的素数;如果不存在这样的素数,则返回 -1 。如果存在多个出
2024-03-01 15:30:00 871 3
原创 【字典树】【KMP】【C++算法】3045统计前后缀下标对 II
定义一个 布尔 函数 isPrefixAndSuffix ,它接受两个字符串参数 str1 和 str2 :当 str1 同时是 str2 的前缀(prefix)和后缀(suffix)时,isPrefixAndSuffix(str1, str2) 返回 true,否则返回 false。例如,isPrefixAndSuffix("aba", "ababa") 返回 true,因为 "aba" 既是 "ababa" 的前缀,也是 "ababa" 的后缀,但是 isPrefixAndSuffix("abc",
2024-03-01 07:00:00 800 8
原创 【数学】【深度优先搜索】【图论】【欧拉环路】753. 破解保险箱
有一个需要密码才能打开的保险箱。密码是 n 位数, 密码的每一位都是范围 [0, k - 1] 中的一个数字。保险箱有一种特殊的密码校验方法,你可以随意输入密码序列,保险箱会自动记住 最后 n 位输入 ,如果匹配,则能够打开保险箱。例如,正确的密码是 "345" ,并且你输入的是 "012345" :输入 0 之后,最后 3 位输入是 "0" ,不正确。输入 1 之后,最后 3 位输入是 "01" ,不正确。输入 2 之后,最后 3 位输入是 "012" ,不正确。输入 3 之后,最后 3 位输
2024-02-29 17:00:00 816 6
原创 【深度优先搜索】【图论】【推荐】332. 重新安排行程
给你一份航线列表 tickets ,其中 tickets[i] = [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。例如,行程 ["JFK", "LGA"] 与 ["JFK", "LGB"] 相比就更小,排序更靠前。假定所有机票至少存在一种合理的行程。且所有的机票 必须都用一次 且 只能用一次。
2024-02-29 07:00:00 742 8
原创 【欧拉回路】【图论】【并集查找】765. 情侣牵手
n 对情侣坐在连续排列的 2n 个座位上,想要牵到对方的手。人和座位由一个整数数组 row 表示,其中 row[i] 是坐在第 i 个座位上的人的 ID。情侣们按顺序编号,第一对是 (0, 1),第二对是 (2, 3),以此类推,最后一对是 (2n-2, 2n-1)。返回 最少交换座位的次数,以便每对情侣可以并肩坐在一起。 每次交换可选择任意两人,让他们站起来交换座位。
2024-02-28 17:00:00 788 4
搜索矩阵C++实现:二分查找Z形查找
2023-12-17
长度最短的子数组C++实现
2023-12-10
[二分查找双指针]LeetCode881: 救生艇
2023-12-03
两数之和 - 输入有序数组
2023-11-26
C++二分查找算法:132 模式
2023-11-12
C++算法:第 N 位数字原理、源码、测试用例
2023-11-05
C++二分查找算法应用:最长递增子序列 原理、源码、测试用例
2023-10-29
二分应用:峰值查找 原理、源码、测试用例
2023-10-22
C++算法:前缀和基础
2023-10-15
时间复杂度O(40n*n)的C++算法:修改图中的边权
2023-10-14
多源最短路径的原理及C++实现
2023-10-04
堆优化迪氏最短单源路径原理及C++实现
2023-10-03
.有向图计数优化版原理及C++实现
2023-10-02
有向图访问计数的原理及C++实现
2023-10-01
朴素迪氏最短单源路径的原理及C++源码及测试用例
2023-09-30
01BFS最短距离原理和C++实现
2023-09-29
深度优先搜索(BFS)的原理和C++实现
2023-09-28
美丽塔单调栈O(n)解法
2023-09-27
较难算法: 美丽塔 时间复杂度O(nlongn)
2023-09-24
让数组不相等的最小总代价
2023-09-23
喜缺全书算法册 C++实现
2023-09-17
二分查找旋转数组源码和视频
2023-08-20
《闻缺陷则喜》之《主册》
2022-09-10
简单的C#类 生成对应的C#类
2021-11-07
保存文件的同时删除文件,保存用时会略微升高
2021-10-11
多线程样例一 读写参数文件
2021-09-09
《闻缺陷则喜》之《软件开发的那些人》 20230917
2021-08-09
作为公共组软件工程师如何工作
2019-02-10
士农库1.1 头文件、lib、dll 两个测试项目
2019-02-10
面试北京XX数通总结
2019-01-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人