- 博客(1390)
- 资源 (86)
- 收藏
- 关注
原创 【C++贪心】2086. 喂食仓鼠的最小食物桶数|1622
给你一个下标从 0 开始的字符串 hamsters ,其中 hamsters[i] 要么是:'H' 表示有一个仓鼠在下标 i ,或者'.' 表示下标 i 是空的。你将要在空的位置上添加一定数量的食物桶来喂养仓鼠。如果仓鼠的左边或右边至少有一个食物桶,就可以喂食它。更正式地说,如果你在位置 i - 1 或者 i + 1 放置一个食物桶,就可以喂养位置为 i 处的仓鼠。在 空的位置 放置食物桶以喂养所有仓鼠的前提下,请你返回需要的 最少 食物桶数。如果无解请返回 -1 。
2024-10-17 07:00:00 1121 95
原创 VS2019打开《喜缺全书算法册》附带代码的方法兼述单元测试
使用方法一:修改某个封装类,然后运行所有测试用例。看是否有测试用例,没通过。调试没有通过的测试用例。在改测试用例上,单击鼠标右键,在右键菜单中选择“调试”。使用方法二:修改某题的源码,然后运行此类的测试用例。使用方法三:输出日志。Microsoft::VisualStudio::CppUnitTestFramework::Logger::WriteMessage("d"); 选中此测试用例才会显示结果。
2024-07-28 07:00:00 3257 56
原创 【C++贪心 位运算】2571. 将整数减少到零需要的最少操作数|1649
给你一个正整数 n ,你可以执行下述操作 任意 次:n 加上或减去 2 的某个 幂返回使 n 等于 0 需要执行的 最少 操作数。如果 x == 2i 且其中 i >= 0 ,则数字 x 是 2 的幂。
2024-10-19 17:27:07 455
原创 【C++贪心】2712. 使所有字符相等的最小成本|1791
给你一个下标从 0 开始、长度为 n 的二进制字符串 s ,你可以对其执行两种操作:选中一个下标 i 并且反转从下标 0 到下标 i(包括下标 0 和下标 i )的所有字符,成本为 i + 1 。选中一个下标 i 并且反转从下标 i 到下标 n - 1(包括下标 i 和下标 n - 1 )的所有字符,成本为 n - i 。返回使字符串内所有字符 相等 需要的 最小成本 。反转 字符意味着:如果原来的值是 '0' ,则反转后值变为 '1' ,反之亦然。
2024-10-19 07:00:00 1390
原创 【C++贪心】2522. 将字符串分割成值不超过 K 的子字符串|1604
给你一个字符串 s ,它每一位都是 1 到 9 之间的数字组成,同时给你一个整数 k 。如果一个字符串 s 的分割满足以下条件,我们称它是一个 好 分割:s 中每个数位 恰好 属于一个子字符串。每个子字符串的值都小于等于 k 。请你返回 s 所有的 好 分割中,子字符串的 最少 数目。如果不存在 s 的 好 分割,返回 -1 。注意:一个字符串的 值 是这个字符串对应的整数。比方说,"123" 的值为 123 ,"1" 的值是 1 。子字符串 是字符串中一段连续的字符序列。
2024-10-18 16:23:22 697
原创 【C++贪心】1775. 通过最少操作次数使数组的和相等|1850
给你两个长度可能不等的整数数组 nums1 和 nums2 。两个数组中的所有值都在 1 到 6 之间(包含 1 和 6)。每次操作中,你可以选择 任意 数组中的任意一个整数,将它变成 1 到 6 之间 任意 的值(包含 1 和 6)。请你返回使 nums1 中所有数的和与 nums2 中所有数的和相等的最少操作次数。如果无法使两个数组的和相等,请返回 -1 。
2024-10-18 07:00:00 756
原创 【C++ 贪心 双指针】2576. 求出最多标记下标|1843
给你一个下标从 0 开始的整数数组 nums 。一开始,所有下标都没有被标记。你可以执行以下操作任意次:选择两个 互不相同且未标记 的下标 i 和 j ,满足 2 * nums[i]
2024-10-17 17:00:00 347
原创 【C++ 贪心】1616. 分割两个字符串得到回文串|1868
给你两个字符串 a 和 b ,它们长度相同。请你选择一个下标,将两个字符串都在 相同的下标 分割开。由 a 可以得到两个字符串: aprefix 和 asuffix ,满足 a = aprefix + asuffix ,同理,由 b 可以得到两个字符串 bprefix 和 bsuffix ,满足 b = bprefix + bsuffix 。请你判断 aprefix + bsuffix 或者 bprefix + asuffix 能否构成回文串。当你将一个字符串 s 分割成 sprefix 和 ssuffi
2024-10-15 17:00:00 655
原创 【C++ 贪心 滑动窗口 前后缀分解】948. 令牌放置|1762
你的初始 能量 为 power,初始 分数 为 0,只有一包令牌以整数数组 tokens 给出。其中 tokens[i] 是第 i 个令牌的值(下标从 0 开始)。你的目标是通过有策略地使用这些令牌以 最大化 总 分数。在一次行动中,你可以用两种方式中的一种来使用一个 未被使用的 令牌(但不是对同一个令牌使用两种方式):朝上:如果你当前 至少 有 tokens[i] 点 能量 ,可以使用令牌 i ,失去 tokens[i] 点 能量 ,并得到 1 分 。朝下:如果你当前至少有 1 分 ,可以使用令牌
2024-10-15 07:00:00 751 1
原创 The package could not be found in Run a NuGet package restore to download the package
某些项目之前是用nuget管理部分依赖的dll。由于三个产品必须共用相同的dll,故将绝大部分dll由nuget管理,改成手动管理。从git克隆代码时,会发生如下错误:严重性 代码 说明 项目 文件 行 禁止显示状态。
2024-10-14 18:20:45 774 1
原创 【C++贪心 分治】1717. 删除子字符串的最大得分|1867
给你一个字符串 s 和两个整数 x 和 y 。你可以执行下面两种操作任意次。删除子字符串 "ab" 并得到 x 分。比方说,从 "cabxbae" 删除 ab ,得到 "cxbae" 。删除子字符串"ba" 并得到 y 分。比方说,从 "cabxbae" 删除 ba ,得到 "cabxe" 。请返回对 s 字符串执行上面操作若干次能得到的最大得分。
2024-10-14 17:00:00 700
原创 【C++贪心 DFS】2673. 使二叉树所有路径值相等的最小代价|1917
给你一个整数 n 表示一棵 满二叉树 里面节点的数目,节点编号从 1 到 n 。根节点编号为 1 ,树中每个非叶子节点 i 都有两个孩子,分别是左孩子 2 * i 和右孩子 2 * i + 1 。树中每个节点都有一个值,用下标从 0 开始、长度为 n 的整数数组 cost 表示,其中 cost[i] 是第 i + 1 个节点的值。每次操作,你可以将树中 任意 节点的值 增加 1 。你可以执行操作 任意 次。你的目标是让根到每一个 叶子结点 的路径值相等。请你返回 最少 需要执行增加操作多少次。注意:
2024-10-14 07:00:00 2202 129
原创 【C++栈】1249. 移除无效的括号|1657
给你一个由 '('、')' 和小写字母组成的字符串 s。你需要从字符串中删除最少数目的 '(' 或者 ')' (可以删除任意位置的括号),使得剩下的「括号字符串」有效。请返回任意一个合法字符串。有效「括号字符串」应当符合以下 任意一条 要求:空字符串或只包含小写字母的字符串可以被写作 AB(A 连接 B)的字符串,其中 A 和 B 都是有效「括号字符串」可以被写作 (A) 的字符串,其中 A 是一个有效的「括号字符串」
2024-10-13 17:00:00 884 5
原创 【C++栈】2434. 使用机器人打印字典序最小的字符串|1953
给你一个字符串 s 和一个机器人,机器人当前有一个空字符串 t 。执行以下操作之一,直到 s 和 t 都变成空字符串:删除字符串 s 的 第一个 字符,并将该字符给机器人。机器人把这个字符添加到 t 的尾部。删除字符串 t 的 最后一个 字符,并将该字符给机器人。机器人将该字符写到纸上。请你返回纸上能写出的字典序最小的字符串。
2024-10-13 07:00:00 719 3
原创 【C++栈 贪心 决策包容性】3170. 删除星号以后字典序最小的字符串|1772
给你一个字符串 s 。它可能包含任意数量的 '*' 字符。你的任务是删除所有的 '*' 字符。当字符串还存在至少一个 '*' 字符时,你可以执行以下操作:删除最左边的 '*' 字符,同时删除该星号字符左边一个字典序 最小 的字符。如果有多个字典序最小的字符,你可以删除它们中的任意一个。请你返回删除所有 '*' 字符以后,剩余字符连接而成的 字典序最小 的字符串。
2024-10-12 18:00:51 880 2
原创 【C++堆(优先队列)】1882. 使用服务器处理任务|1979
给你两个 下标从 0 开始 的整数数组 servers 和 tasks ,长度分别为 n 和 m 。servers[i] 是第 i 台服务器的 权重 ,而 tasks[j] 是处理第 j 项任务 所需要的时间(单位:秒)。你正在运行一个仿真系统,在处理完所有任务后,该系统将会关闭。每台服务器只能同时处理一项任务。第 0 项任务在第 0 秒可以开始处理,相应地,第 j 项任务在第 j 秒可以开始处理。处理第 j 项任务时,你需要为它分配一台 权重最小
2024-10-12 17:59:54 773
原创 【C++堆(优先队列)】1792. 最大平均通过率|1817 不知道如何证明,欢迎告诉我
一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试。给你一个二维数组 classes ,其中 classes[i] = [passi, totali] ,表示你提前知道了第 i 个班级总共有 totali 个学生,其中只有 passi 个学生可以通过考试。给你一个整数 extraStudents ,表示额外有 extraStudents 个聪明的学生,他们 一定 能通过任何班级的期末考。你需要给这 extraStudents 个学生每人都安排一个班级,使得 所有 班级的 平均 通过
2024-10-11 15:30:00 1497 4
原创 【C++堆(优先队列)】1834. 单线程 CPU|1797
给你一个二维数组 tasks ,用于表示 n 项从 0 到 n - 1 编号的任务。其中 tasks[i] = [enqueueTimei, processingTimei] 意味着第 i 项任务将会于 enqueueTimei 时进入任务队列,需要 processingTimei 的时长完成执行。现有一个单线程 CPU ,同一时间只能执行 最多一项 任务,该 CPU 将会按照下述方式运行:如果 CPU 空闲,且任务队列中没有需要执行的任务,则 CPU 保持空闲状态。如
2024-10-11 07:00:00 672 1
原创 【C++差分数组】3229. 使数组等于目标数组所需的最少操作次数|2066
给你两个长度相同的正整数数组 nums 和 target。在一次操作中,你可以选择 nums 的任何子数组,并将该子数组内的每个元素的值增加或减少 1。返回使 nums 数组变为 target 数组所需的 最少 操作次数。
2024-10-10 17:00:00 623 1
原创 【C++堆(优先队列)】2462. 雇佣 K 位工人的总代价|1763
给你一个下标从 0 开始的整数数组 costs ,其中 costs[i] 是雇佣第 i 位工人的代价。同时给你两个整数 k 和 candidates 。我们想根据以下规则恰好雇佣 k 位工人:总共进行 k 轮雇佣,且每一轮恰好雇佣一位工人。在每一轮雇佣中,从最前面 candidates 和最后面 candidates 人中选出代价最小的一位工人,如果有多位代价相同且最小的工人,选择下标更小的一位工人。比方说,costs = [3,2,7,7,1,2] 且 candidates = 2 ,第一轮雇佣中
2024-10-09 17:00:00 1789 5
原创 【C++堆(优先队列)】1801. 积压订单中的订单总数|1711
给你一个二维整数数组 orders ,其中每个 orders[i] = [pricei, amounti, orderTypei] 表示有 amounti 笔类型为 orderTypei 、价格为 pricei 的订单。订单类型 orderTypei 可以分为两种:0 表示这是一批采购订单 buy1 表示这是一批销售订单 sell注意,orders[i] 表示一批共计 amounti 笔的独立订单,这些订单的价格和类型相同。对于所有有效的 i ,由 orders[i] 表示的所有订单提交时间均早于
2024-10-09 07:00:00 968
原创 【C++堆(优先队列)】1942. 最小未被占据椅子的编号|1695
有 n 个朋友在举办一个派对,这些朋友从 0 到 n - 1 编号。派对里有 无数 张椅子,编号为 0 到 infinity 。当一个朋友到达派对时,他会占据 编号最小 且未被占据的椅子。比方说,当一个朋友到达时,如果椅子 0 ,1 和 5 被占据了,那么他会占据 2 号椅子。当一个朋友离开派对时,他的椅子会立刻变成未占据状态。如果同一时刻有另一个朋友到达,可以立即占据这张椅子。给你一个下标从 0 开始的二维整数数组 times ,其中 times[i] = [arrivali, leavingi]
2024-10-08 17:00:00 937 2
原创 【C++堆(优先队列)】2233. K 次增加后的最大乘积|1685
给你一个非负整数数组 nums 和一个整数 k 。每次操作,你可以选择 nums 中 任一 元素并将它 增加 1 。请你返回 至多 k 次操作后,能得到的 nums的 最大乘积 。由于答案可能很大,请你将答案对 109 + 7 取余后返回。
2024-10-08 07:00:00 928 1
原创 【C++前缀和】1878. 矩阵中最大的三个菱形和|1897
给你一个 m x n 的整数矩阵 grid 。菱形和 指的是 grid 中一个正菱形 边界 上的元素之和。本题中的菱形必须为正方形旋转45度,且四个角都在一个格子当中。下图是四个可行的菱形,每个菱形和应该包含的格子都用了相应颜色标注在图中。
2024-10-07 07:00:00 1897 109
原创 【C++差分数组】3224. 使差值相等的最少数组改动次数|1996
给你一个长度为 n 的整数数组 nums ,n 是 偶数 ,同时给你一个整数 k 。你可以对数组进行一些操作。每次操作中,你可以将数组中 任一 元素替换为 0 到 k 之间的 任一 整数。执行完所有操作以后,你需要确保最后得到的数组满足以下条件:存在一个整数 X ,满足对于所有的 (0
2024-10-06 17:00:00 667 2
原创 【C++差分数组】1526. 形成目标数组的子数组最少增加次数|1872
给你一个整数数组 target 和一个数组 initial ,initial 数组与 target 数组有同样的维度,且一开始全部为 0 。请你返回从 initial 得到 target 的最少操作次数,每次操作需遵循以下规则:在 initial 中选择 任意 子数组,并将子数组中每个元素增加 1 。答案保证在 32 位有符号整数以内。
2024-10-06 07:55:38 1030
原创 【C++差分数组】1589. 所有排列中的最大和|1871
有一个整数数组 nums ,和一个查询数组 requests ,其中 requests[i] = [starti, endi] 。第 i 个查询求 nums[starti] + nums[starti + 1] + ... + nums[endi - 1] + nums[endi] 的结果 ,starti 和 endi 数组索引都是 从 0 开始 的。你可以任意排列 nums 中的数字,请你返回所有查询结果之和的最大值。由于答案可能会很大,请你将它对 109 + 7 取余 后返回。
2024-10-05 17:00:00 1010
原创 【C++差分数组】2381. 字母移位 II|1793
给你一个小写英文字母组成的字符串 s 和一个二维整数数组 shifts ,其中 shifts[i] = [starti, endi, directioni] 。对于每个 i ,将 s 中从下标 starti 到下标 endi (两者都包含)所有字符都进行移位运算,如果 directioni = 1 将字符向后移位,如果 directioni = 0 将字符向前移位。将一个字符 向后 移位的意思是将这个字符用字母表中 下一个 字母替换(字母表视为环绕的,所以 'z' 变成 'a')。类似的,将一个字符 向前
2024-10-05 07:00:00 935
原创 【C++差分数组】2406. 将区间分为最少组数|1731
给你一个二维整数数组 intervals ,其中 intervals[i] = [lefti, righti] 表示 闭 区间 [lefti, righti] 。你需要将 intervals 划分为一个或者多个区间 组 ,每个区间 只 属于一个组,且同一个组中任意两个区间 不相交 。请你返回 最少 需要划分成多少个组。如果两个区间覆盖的范围有重叠(即至少有一个公共数字),那么我们称这两个区间是 相交 的。比方说区间 [1, 5] 和 [5, 8] 相交。
2024-10-04 17:00:00 1630
原创 【C++前缀和】1895. 最大的幻方|1781
一个 k x k 的 幻方 指的是一个 k x k 填满整数的方格阵,且每一行、每一列以及两条对角线的和 全部相等 。幻方中的整数 不需要互不相同 。显然,每个 1 x 1 的方格都是一个幻方。给你一个 m x n 的整数矩阵 grid ,请你返回矩阵中 最大幻方 的 尺寸 (即边长 k)。
2024-10-04 07:00:00 1082 74
原创 【C++前缀和】3026. 最大好子数组和|1816
给你一个长度为 n 的数组 nums 和一个 正 整数 k 。如果 nums 的一个子数组中,第一个元素和最后一个元素 差的绝对值恰好 为 k ,我们称这个子数组为 好 的。换句话说,如果子数组 nums[i..j] 满足 |nums[i] - nums[j]| == k ,那么它是一个好子数组。请你返回 nums 中 好 子数组的 最大 和,如果没有好子数组,返回 0 。
2024-10-03 17:00:00 934
原创 【C++二分查找 前缀和】1712. 将数组分成三个子数组的方案数|2078
我们称一个分割整数数组的方案是 好的 ,当它满足:数组被分成三个 非空 连续子数组,从左至右分别命名为 left , mid , right 。left 中元素和小于等于 mid 中元素和,mid 中元素和小于等于 right 中元素和。给你一个 非负 整数数组 nums ,请你返回 好的 分割 nums 方案数目。由于答案可能会很大,请你将
2024-10-03 07:00:00 804
原创 【C++前缀和】2845. 统计趣味子数组的数目|2073
给你一个下标从 0 开始的整数数组 nums ,以及整数 modulo 和整数 k 。请你找出并统计数组中 趣味子数组 的数目。如果 子数组 nums[l..r] 满足下述条件,则称其为 趣味子数组 :在范围 [l, r] 内,设 cnt 为满足 nums[i] % modulo == k 的索引 i 的数量。并且 cnt % modulo == k 。以整数形式表示并返回趣味子数组的数目。注意:子数组是数组中的一个连续非空的元素序列。
2024-10-02 17:00:00 1046
原创 【C++前缀和 状态压缩】1371. 每个元音包含偶数次的最长子字符串|2040
# LeetCode1371. 每个元音包含偶数次的最长子字符串给你一个字符串 s ,请你返回满足以下条件的最长子字符串的长度:每个元音字母,即 'a','e','i','o','u' ,在子字符串中都恰好出现了偶数次。
2024-10-02 07:00:00 844
原创 【C++ 前缀和 数论】1590. 使数组和能被 P 整除|2038
给你一个正整数数组 nums,请你移除 最短 子数组(可以为 空),使得剩余元素的 和 能被 p 整除。 不允许 将整个数组都移除。请你返回你需要移除的最短子数组的长度,如果无法满足题目要求,返回 -1 。子数组 定义为原数组中连续的一组元素。
2024-10-01 17:00:00 693 1
喜缺全书算法册对应源码单元测试用例
2024-07-05
本博客配套流程图,会经常更新
2024-04-24
搜索矩阵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
喜缺全书之平凡的经历最新版
2023-08-18
《闻缺陷则喜》之《主册》
2022-09-10
简单的C#类 生成对应的C#类
2021-11-07
保存文件的同时删除文件,保存用时会略微升高
2021-10-11
多线程样例一 读写参数文件
2021-09-09
《闻缺陷则喜》之《软件开发的那些人》 20230917
2021-08-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人