- 博客(990)
- 资源 (111)
- 收藏
- 关注
原创 【性能优化】 【回溯】 【字符串】1307. 口算难题
给你一个方程,左边用 words 表示,右边用 result 表示。你需要根据以下规则检查方程是否可解:每个字符都会被解码成一位数字(0 - 9)。每对不同的字符必须映射到不同的数字。每个 words[i] 和 result 都会被解码成一个没有前导零的数字。左侧数字之和(words)等于右侧数字(result)。 如果方程可解,返回 True,否则返回 False。
2024-03-28 07:00:00 1742 127
原创 【广度优先搜索】【分类讨论】900. 最佳运动员的比拼回合
n 名运动员参与一场锦标赛,所有运动员站成一排,并根据 最开始的 站位从 1 到 n 编号(运动员 1 是这一排中的第一个运动员,运动员 2 是第二个运动员,依此类推)。锦标赛由多个回合组成(从回合 1 开始)。每一回合中,这一排从前往后数的第 i 名运动员需要与从后往前数的第 i 名运动员比拼,获胜者将会进入下一回合。如果当前回合中运动员数目为奇数,那么中间那位运动员将轮空晋级下一回合。例如,当前回合中,运动员 1, 2, 4, 6, 7 站成一排运动员 1 需要和运动员 7 比拼运动员 2 需
2024-03-25 07:00:00 1226 33
原创 动态规划汇总
动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。
2024-01-20 17:00:00 1206 14
原创 【单调栈】【网格】【柱图面积】85. 最大矩形
给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
2024-03-29 15:30:00 632 4
原创 【图论】【割点】【C++算法】928. 尽量减少恶意软件的传播 II
给定一个由 n 个节点组成的网络,用 n x n 个邻接矩阵 graph 表示。在节点网络中,只有当 graph[i][j] = 1 时,节点 i 能够直接连接到另一个节点 j。一些节点 initial 最初被恶意软件感染。只要两个节点直接连接,且其中至少一个节点受到恶意软件的感染,那么两个节点都将被恶意软件感染。这种恶意软件的传播将继续,直到没有更多的节点可以被这种方式感染。假设 M(initial) 是在恶意软件停止传播之后,整个网络中感染恶意软件的最终节点数。我们可以从 initial 中删除一
2024-03-29 07:00:00 532 6
原创 【图论】【 割边】【C++算法】1192. 查找集群内的关键连接
力扣数据中心有 n 台服务器,分别按从 0 到 n-1 的方式进行了编号。它们之间以 服务器到服务器 的形式相互连接组成了一个内部集群,连接是无向的。用 connections 表示集群网络,connections[i] = [a, b] 表示服务器 a 和 b 之间形成连接。任何服务器都可以直接或者间接地通过网络到达任何其他服务器。关键连接 是在该集群中的重要连接,假如我们将它移除,便会导致某些服务器无法访问其他服务器。请你以任意顺序返回该集群内的所有 关键连接 。
2024-03-28 17:00:00 707 1
原创 【数学】 【分数】 【字符串】972. 相等的有理数
给定两个字符串 s 和 t ,每个字符串代表一个非负有理数,只有当它们表示相同的数字时才返回 true 。字符串中可以使用括号来表示有理数的重复部分。有理数 最多可以用三个部分来表示:整数部分 、小数非重复部分 和小数重复部分 。数字可以用以下三种方法之一来表示: 例: 0 ,12 和 123 例:
2024-03-27 17:00:00 368 2
原创 【贪心]【字符串】【分类讨论】420 强密码检验器
满足以下条件的密码被认为是强密码:由至少 6 个,至多 20 个字符组成。包含至少 一个小写 字母,至少 一个大写 字母,和至少 一个数字 。不包含连续三个重复字符 (比如 "Baaabb0" 是弱密码, 但是 "Baaba0" 是强密码)。给你一个字符串 password ,返回 将 password 修改到满足强密码条件需要的最少修改步数。如果 password 已经是强密码,则返回 0 。在一步修改操作中,你可以:插入一个字符到 password ,从 password 中删除一个字符,
2024-03-27 07:00:00 906 8
原创 【贪心】【分类讨论】2499. 让数组不相等的最小总代价
给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,两者长度都为 n 。每次操作中,你可以选择交换 nums1 中任意两个下标处的值。操作的 开销 为两个下标的 和 。你的目标是对于所有的 0
2024-03-26 17:00:00 924 1
原创 【解析几何】 【多源路径】 【贪心】1520 最多的不重叠子字符串
给你一个只包含小写字母的字符串 s ,你需要找到 s 中最多数目的非空子字符串,满足如下条件:这些字符串之间互不重叠,也就是说对于任意两个子字符串 s[i..j] 和 s[x..y] ,要么 j < x 要么 i > y 。如果一个子字符串包含字符 char ,那么 s 中所有 char 字符都应该在这个子字符串中。请你找到满足上述条件的最多子字符串数目。如果有多个解法有相同的子字符串数目,请返回这些子字符串总长度最小的一个解。可以证明最小总长度解是唯一的。请注意,你可以以 任意 顺序返回最优解的子
2024-03-26 07:00:00 606 8
原创 【字典树】【字符串】【 前缀】100268. 最长公共后缀查询
给你两个字符串数组 wordsContainer 和 wordsQuery 。对于每个 wordsQuery[i] ,你需要从 wordsContainer 中找到一个与 wordsQuery[i] 有 最长公共后缀 的字符串。如果 wordsContainer 中有两个或者更多字符串有最长公共后缀,那么答案为长度 最短 的。如果有超过两个字符串有 相同 最短长度,那么答案为它们在 wordsContainer 中出现 更早 的一个。请你返回一个整数数组 ans ,其中 ans[i]是 wordsCon
2024-03-25 17:00:00 1484 18
原创 【设计】 【数学】1622 奇妙序列
请你实现三个 API append,addAll 和 multAll 来实现奇妙序列。请实现 Fancy 类 :Fancy() 初始化一个空序列对象。void append(val) 将整数 val 添加在序列末尾。void addAll(inc) 将所有序列中的现有数值都增加 inc 。void multAll(m) 将序列中的所有现有数值都乘以整数 m 。int getIndex(idx) 得到下标为 idx 处的数值(下标从 0 开始),并将结果对 109 + 7 取余。如果下标大于等于序
2024-03-23 17:00:00 574 12
原创 【贪心】【回溯】【字符串】2014. 重复 K 次的最长子序列
给你一个长度为 n 的字符串 s ,和一个整数 k 。请你找出字符串 s 中 重复 k 次的 最长子序列 。子序列 是由其他字符串删除某些(或不删除)字符派生而来的一个字符串。如果 seq * k 是 s 的一个子序列,其中 seq * k 表示一个由 seq 串联 k 次构造的字符串,那么就称 seq 是字符串 s 中一个 重复 k 次 的子序列。举个例子,"bba" 是字符串 "bababcba" 中的一个重复 2 次的子序列,因为字符串 "bbabba" 是由 "bba" 串联 2 次构造的,而
2024-03-23 07:00:00 816 4
原创 【二进制求公约数】【数学】【数论】2543. 判断一个点是否可以到达
给你一个无穷大的网格图。一开始你在 (1, 1) ,你需要通过有限步移动到达点 (targetX, targetY) 。每一步 ,你可以从点 (x, y) 移动到以下点之一:
2024-03-22 15:30:00 563 2
原创 【贪心】【二分查找】【动态规划】1739放置盒子
有一个立方体房间,其长度、宽度和高度都等于 n 个单位。请你在房间里放置 n 个盒子,每个盒子都是一个单位边长的立方体。放置规则如下:你可以把盒子放在地板上的任何地方。如果盒子 x 需要放置在盒子 y 的顶部,那么盒子 y 竖直的四个侧面都 必须 与另一个盒子或墙相邻。
2024-03-21 17:00:00 1378
原创 【动态规划】【同余前缀和】【多重背包】[推荐]2902. 和带限制的子多重集合的数目
给你一个下标从 0 开始的非负整数数组 nums 和两个整数 l 和 r 。请你返回 nums 中子多重集合的和在闭区间 [l, r] 之间的 子多重集合的数目 。由于答案可能很大,请你将答案对 10^9^ + 7 取余后返回。子多重集合 指的是从数组中选出一些元素构成的 无序 集合,每个元素 x 出现的次数可以是 0, 1, ..., occ[x] 次,其中 occ[x] 是元素 x 在数组中的出现次数。
2024-03-21 07:00:00 2599 48
原创 【位运算】【 数学】【 哈希映射】2857. 统计距离为 k 的点对
给你一个 二维 整数数组 coordinates 和一个整数 k ,其中 coordinates[i] = [xi, yi] 是第 i 个点在二维平面里的坐标。我们定义两个点 (x1, y1) 和 (x2, y2) 的 距离 为 (x1 XOR x2) + (y1 XOR y2) ,XOR 指的是按位异或运算。请你返回满足 i < j 且点 i 和点 j之间距离为 k 的点对数目。
2024-03-20 17:00:00 1000 8
原创 【图论】【深度优先搜索】【换根法】2858. 可以到达每一个节点的最少边反转次数
给你一个 n 个点的 简单有向图 (没有重复边的有向图),节点编号为 0 到 n - 1 。如果这些边是双向边,那么这个图形成一棵 树 。给你一个整数 n 和一个 二维 整数数组 edges ,其中 edges[i] = [ui, vi] 表示从节点 ui 到节点 vi 有一条 有向边 。边反转 指的是将一条边的方向反转,也就是说一条从节点 ui 到节点 vi 的边会变为一条从节点 vi 到节点 ui 的边。对于范围 [0, n - 1] 中的每一个节点 i ,你的任务是分别 独立 计算 最少 需要多
2024-03-20 07:00:00 976 8
原创 【动态规划】【 数位dp】2827. 范围中美丽整数的数目
给你正整数 low ,high 和 k 。如果一个数满足以下两个条件,那么它是 美丽的 :偶数数位的数目与奇数数位的数目相同。这个整数可以被 k 整除。请你返回范围 [low, high] 中美丽整数的数目。
2024-03-19 17:00:00 761 3
原创 【模拟】【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 1250 17
原创 【前缀和】3085. 成为 K 特殊字符串需要删除的最少字符数
给你一个字符串 word 和一个整数 k。如果 |freq(word[i]) - freq(word[j])|
2024-03-18 17:00:00 805 8
原创 【对顶队列】【中位数贪心】【前缀和】3086. 拾起 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 1422 59
原创 【二分查找】【键值皆有序】1840最高建筑高度
在一座城市里,你需要建 n 栋新的建筑。这些新的建筑会从 1 到 n 编号排成一列。这座城市对这些新建筑有一些规定:每栋建筑的高度必须是一个非负整数。第一栋建筑的高度 必须 是 0 。任意两栋相邻建筑的高度差 不能超过 1 。除此以外,某些建筑还有额外的最高高度限制。这些限制会以二维整数数组 restrictions 的形式给出,其中 restrictions[i] = [idi, maxHeighti] ,表示建筑 idi 的高度 不能超过 maxHeighti 。题目保证每栋建筑在 res
2024-03-16 17:00:00 746 1
原创 【数学】【数论】【最大公约数】1819. 序列中不同最大公约数的数目
给你一个由正整数组成的数组 nums 。数字序列的 最大公约数 定义为序列中所有整数的共有约数中的最大整数。
2024-03-16 07:00:00 1562 3
原创 【数学】【计算几何】1453. 圆形靶内的最大飞镖数量
Alice 向一面非常大的墙上掷出 n 支飞镖。给你一个数组 darts ,其中 darts[i] = [xi, yi] 表示 Alice 掷出的第 i 支飞镖落在墙上的位置。Bob 知道墙上所有 n 支飞镖的位置。他想要往墙上放置一个半径为 r 的圆形靶。使 Alice 掷出的飞镖尽可能多地落在靶上。给你整数 r ,请返回能够落在 任意 半径为 r 的圆形靶内或靶上的最大飞镖数。
2024-03-15 07:00:00 795 4
原创 【数学】【位运算】LeetCoce810. 黑板异或游戏
黑板上写着一个非负整数数组 nums[i] 。Alice 和 Bob 轮流从黑板上擦掉一个数字,Alice 先手。如果擦除一个数字后,剩余的所有数字按位异或运算得出的结果等于 0 的话,当前玩家游戏失败。 另外,如果只剩一个数字,按位异或运算得到它本身;如果无数字剩余,按位异或运算结果为 0。并且,轮到某个玩家时,如果当前黑板上所有数字按位异或运算结果等于 0 ,这个玩家获胜。假设两个玩家每步都使用最优解,当且仅当 Alice 获胜时返回 true。
2024-03-14 17:00:00 712
原创 【哈希映射】【 哈希集合】 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 824 2
原创 【位运算】【脑筋急转弯】2749. 得到整数零需要执行的最少操作数
给你两个整数:num1 和 num2 。在一步操作中,你需要从范围 [0, 60] 中选出一个整数 i ,并从 num1 减去 2i + num2 。请你计算,要想使 num1 等于 0 需要执行的最少操作数,并以整数形式返回。如果无法使 num1 等于 0 ,返回 -1 。
2024-03-13 07:00:00 1007 4
原创 【字典树】 【哈希表】 【字符串】100251. 数组中的最短非公共子字符串
给你一个数组 arr ,数组中有 n 个 非空 字符串。请你求出一个长度为 n 的字符串 answer ,满足:answer[i] 是 arr[i] 最短 的子字符串,且它不是 arr 中其他任何字符串的子字符串。如果有多个这样的子字符串存在,answer[i] 应该是它们中字典序最小的一个。如果不存在这样的子字符串,answer[i] 为空字符串。请你返回数组 answer 。
2024-03-12 17:48:00 1075 18
原创 【数学】【网格】【状态压缩】782 变为棋盘
# LeetCode:782 变为棋盘一个 n x n 的二维网络 board 仅由 0 和 1 组成 。每次移动,你能任意交换两列或是两行的位置。返回 将这个矩阵变为 “棋盘” 所需的最小移动次数 。如果不存在可行的变换,输出 -1。“棋盘” 是指任意一格的上下左右四个方向的值均与本身不同的矩阵。
2024-03-12 17:00:00 872
原创 【图论】 【割点】 【双连通分类】LCP 54. 夺回据点
魔物了占领若干据点,这些据点被若干条道路相连接,roads[i] = [x, y] 表示编号 x、y 的两个据点通过一条道路连接。现在勇者要将按照以下原则将这些据点逐一夺回:在开始的时候,勇者可以花费资源先夺回一些据点,初始夺回第 j 个据点所需消耗的资源数量为 cost[j]接下来,勇者在不消耗资源情况下,每次可以夺回一个和「已夺回据点」相连接的魔物据点,并对其进行夺回注:为了防止魔物暴动,勇者在每一次夺回据点后(包括花费资源夺回据点后),需要保证剩余的所有魔物据点之间是相连通的(不经过「已夺回据
2024-03-11 12:27:05 1170 12
原创 割点原理及封装好的割点类
**性质一**: 搜索树上的两点连通,则对应的图一定连通。因为:搜索树有的边,对应的图都有。**性质二**:搜索树上,假定一个节点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 2925 46
原创 【动态规划】【前缀和】【和式变换】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 1494 20
原创 【数学】【组合数学】1830. 使字符串有序的最少操作次数
给你一个字符串 s (下标从 0 开始)。你需要对 s 执行以下操作直到它变为一个有序字符串:找到 最大下标 i ,使得 1
2024-03-10 07:00:00 604 4
原创 【字符串】【贪心】【 树状数组】2193. 得到回文串的最少操作次数
给你一个只包含小写英文字母的字符串 s 。每一次 操作 ,你可以选择 s 中两个 相邻 的字符,并将它们交换。请你返回将 s 变成回文串的 最少操作次数 。注意 ,输入数据会确保 s 一定能变成一个回文串。
2024-03-09 17:00:00 933 4
原创 【字符串】【分类讨论】【KMP】1163. 按字典序排在最后的子串
给你一个字符串 s ,找出它的所有子串并按字典序排列,返回排在最后的那个子串。
2024-03-09 07:00:00 712 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 866 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关注的人