- 博客(771)
- 资源 (86)
- 收藏
- 关注

原创 【贪心算法】LeetCode2071:你可以安排的最多任务数目
给你 n 个任务和 m 个工人。每个任务需要一定的力量值才能完成,需要的力量值保存在下标从 0 开始的整数数组 tasks 中,第 i 个任务需要 tasks[i] 的力量才能完成。每个工人的力量值保存在下标从 0 开始的整数数组 workers 中,第 j 个工人的力量值为 workers[j] 。每个工人只能完成 一个 任务,且力量值需要 大于等于 该任务的力量要求值(即 workers[j] >= tasks[i] )。除此以外,你还有 pills 个神奇药丸,可以给 一个工人的力量值 增加 str
2023-12-07 07:00:00
1267
116

原创 C++算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例
包括4个压缩包,初始代码,实现前缀和,实现前缀积,实现前缀异或。都是在前者的基础上修改的。
2023-10-16 07:30:00
1010
15
原创 二分查找|前缀和|滑动窗口|2302:统计得分小于 K 的子数组数目
一个数组的 分数 定义为数组之和 乘以 数组的长度。比方说,[1, 2, 3, 4, 5] 的分数为 (1 + 2 + 3 + 4 + 5) * 5 = 75 。给你一个正整数数组 nums 和一个整数 k ,请你返回 nums 中分数 严格小于 k 的 非空整数子数组数目。子数组 是数组中的一个连续元素序列。
2023-12-09 07:00:00
196
7
原创 【二分查找】LeetCode:2354.优质数对的数目
给你一个下标从 0 开始的正整数数组 nums 和一个正整数 k 。如果满足下述条件,则数对 (num1, num2) 是 优质数对 :num1 和 num2 都 在数组 nums 中存在。num1 OR num2 和 num1 AND num2 的二进制表示中值为 1 的位数之和大于等于 k ,其中 OR 是按位 或 操作,而 AND 是按位 与 操作。返回 不同 优质数对的数目。如果 a != c 或者 b != d ,则认为 (a, b) 和 (c, d) 是不同的两个数对。例如,(1, 2
2023-12-09 06:45:00
26
原创 【二分查找】LeetCode2141: 同时运行 N 台电脑的最长时间
你有 n 台电脑。给你整数 n 和一个下标从 0 开始的整数数组 batteries ,其中第 i 个电池可以让一台电脑 运行 batteries[i] 分钟。你想使用这些电池让 全部 n 台电脑 同时 运行。一开始,你可以给每台电脑连接 至多一个电池 。然后在任意整数时刻,你都可以将一台电脑与它的电池断开连接,并连接另一个电池,你可以进行这个操作 任意次 。新连接的电池可以是一个全新的电池,也可以是别的电脑用过的电池。断开连接和连接新的电池不会花费任何时间。注意,你不能给电池充电。请你返回你可以让
2023-12-08 07:00:00
53
3
原创 二分查找|差分数组|LeetCode2251:花期内花的数目
给你一个下标从 0 开始的二维整数数组 flowers ,其中 flowers[i] = [starti, endi] 表示第 i 朵花的 花期 从 starti 到 endi (都 包含)。同时给你一个下标从 0 开始大小为 n 的整数数组 people ,people[i] 是第 i 个人来看花的时间。请你返回一个大小为 n 的整数数组 answer ,其中 answer[i]是第 i 个人到达时在花期内花的 数目 。
2023-12-08 06:45:00
22
1
原创 前缀和|二分查找|LeetCode2234| 花园的最大总美丽值
Alice 是 n 个花园的园丁,她想通过种花,最大化她所有花园的总美丽值。给你一个下标从 0 开始大小为 n 的整数数组 flowers ,其中 flowers[i] 是第 i 个花园里已经种的花的数目。已经种了的花 不能 移走。同时给你 newFlowers ,表示 Alice 额外可以种花的 最大数目 。同时给你的还有整数 target ,full 和 partial 。如果一个花园有 至少 target 朵花,那么这个花园称为 完善的 ,花园的 总美丽值 为以下分数之 和 :完善 花园数目乘以
2023-12-07 13:15:00
97
4
原创 【动态规划】LeetCode2111:使数组 K 递增的最少操作次数
给你一个下标从 0 开始包含 n 个正整数的数组 arr ,和一个正整数 k 。如果对于每个满足 k
2023-12-06 12:04:02
131
5
原创 [组合数学]LeetCode:2954:统计感冒序列的数目
给你一个整数 n 和一个下标从 0 开始的整数数组 sick ,数组按 升序 排序。有 n 位小朋友站成一排,按顺序编号为 0 到 n - 1 。数组 sick 包含一开始得了感冒的小朋友的位置。如果位置为 i 的小朋友得了感冒,他会传染给下标为 i - 1 或者 i + 1 的小朋友,前提 是被传染的小朋友存在且还没有得感冒。每一秒中, 至多一位 还没感冒的小朋友会被传染。经过有限的秒数后,队列中所有小朋友都会感冒。感冒序列 指的是 所有 一开始没有感冒的小朋友最后得感冒的顺序序列。请你返回所有感冒序
2023-12-06 06:45:00
131
4
原创 【滑动窗口】LeetCode2953:统计完全子字符串
给你一个字符串 word 和一个整数 k 。如果 word 的一个子字符串 s 满足以下条件,我们称它是 完全字符串:s 中每个字符 恰好 出现 k 次。相邻字符在字母表中的顺序 至多 相差 2 。也就是说,s 中两个相邻字符 c1 和 c2 ,它们在字母表中的位置相差 至多 为 2 。请你返回 word 中 完全 子字符串的数目。子字符串 指的是一个字符串中一段连续 非空 的字符序列。
2023-12-05 07:00:00
202
13
原创 【离散差分】LeetCode2953:统计完全子字符串
给你一个字符串 word 和一个整数 k 。如果 word 的一个子字符串 s 满足以下条件,我们称它是 完全字符串:s 中每个字符 恰好 出现 k 次。相邻字符在字母表中的顺序 至多 相差 2 。也就是说,s 中两个相邻字符 c1 和 c2 ,它们在字母表中的位置相差 至多 为 2 。请你返回 word 中 完全 子字符串的数目。子字符串 指的是一个字符串中一段连续 非空 的字符序列。
2023-12-05 06:45:00
34
1
原创 [二分查找]LeetCode2040:两个有序数组的第 K 小乘积
给你两个 从小到大排好序 且下标从 0 开始的整数数组 nums1 和 nums2 以及一个整数 k ,请你返回第 k (从 1 开始编号)小的 nums1[i] * nums2[j] 的乘积,其中 0
2023-12-04 07:00:00
914
108
原创 [二分查找双指针]LeetCode881: 救生艇
给定数组 people 。people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit。每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。返回 承载所有人所需的最小船数 。
2023-12-04 06:45:00
52
原创 二分查找:LeetCode2035:将数组分成两个数组并最小化数组和的差
给你一个长度为 2 * n 的整数数组。你需要将 nums 分成 两个 长度为 n 的数组,分别求出两个数组的和,并 最小化 两个数组和之 差的绝对值 。nums 中每个元素都需要放入两个数组之一。请你返回 最小 的数组和之差。
2023-12-03 07:00:00
193
8
原创 [二分查找]LeetCode2009 :使数组连续的最少操作数
给你一个整数数组 nums 。每一次操作中,你可以将 nums 中 任意 一个元素替换成 任意 整数。如果 nums 满足以下条件,那么它是 连续的 :nums 中所有元素都是 互不相同 的。nums 中 最大 元素与 最小 元素的差等于 nums.length - 1 。比方说,nums = [4, 2, 5, 3] 是 连续的 ,但是 nums = [1, 2, 3, 5, 6] 不是连续的 。请你返回使 nums 连续 的 最少 操作次数。
2023-12-03 06:45:00
61
原创 【二分查找】LeetCode1970:你能穿过矩阵的最后一天
给你一个下标从 1 开始的二进制矩阵,其中 0 表示陆地,1 表示水域。同时给你 row 和 col 分别表示矩阵中行和列的数目。一开始在第 0 天,整个 矩阵都是 陆地 。但每一天都会有一块新陆地被 水 淹没变成水域。给你一个下标从 1 开始的二维数组 cells ,其中 cells[i] = [ri, ci] 表示在第 i 天,第 ri 行 ci 列(下标都是从 1 开始)的陆地会变成 水域 (也就是 0 变成 1 )。你想知道从矩阵最 上面 一行走到最 下面 一行,且只经过陆地格子的 最后一天
2023-12-02 07:00:00
271
10
原创 [二分查找]LeetCode1964:找出到每个位置为止最长的有效障碍赛跑路线
你打算构建一些障碍赛跑路线。给你一个 下标从 0 开始 的整数数组 obstacles ,数组长度为 n ,其中 obstacles[i] 表示第 i 个障碍的高度。对于每个介于 0 和 n - 1 之间(包含 0 和 n - 1)的下标 i ,在满足下述条件的前提下,请你找出 obstacles 能构成的最长障碍路线的长度:你可以选择下标介于 0 到 i 之间(包含 0 和 i)的任意个障碍。在这条路线中,必须包含第 i 个障碍。你必须按障碍在 obstacles 中的 出现顺序 布置这些障碍。
2023-12-02 06:45:00
57
原创 【深度优先】LeetCode1932:合并多棵二叉搜索树
给你 n 个 二叉搜索树的根节点 ,存储在数组 trees 中(下标从 0 开始),对应 n 棵不同的二叉搜索树。trees 中的每棵二叉搜索树 最多有 3 个节点 ,且不存在值相同的两个根节点。在一步操作中,将会完成下述步骤:选择两个 不同的 下标 i 和 j ,要求满足在 trees[i] 中的某个 叶节点 的值等于 trees[j] 的 根节点的值 。用 trees[j] 替换 trees[i] 中的那个叶节点。从 trees 中移除 trees[j] 。如果在执行 n - 1 次操作后,能形
2023-12-01 06:45:00
132
2
原创 【动态规划】LeetCode2552:优化了6版的1324模式
给你一个长度为 n 下标从 0 开始的整数数组 nums ,它包含 1 到 n 的所有数字,请你返回上升四元组的数目。如果一个四元组 (i, j, k, l) 满足以下条件,我们称它是上升的:0
2023-11-30 07:00:00
1802
128
原创 C++二分查找算法:包含每个查询的最小区间
给你一个二维整数数组 intervals ,其中 intervals[i] = [lefti, righti] 表示第 i 个区间开始于 lefti 、结束于 righti(包含两侧取值,闭区间)。区间的 长度 定义为区间中包含的整数数目,更正式地表达是 righti - lefti + 1 。再给你一个整数数组 queries 。第 j 个查询的答案是满足 lefti
2023-11-30 06:45:00
99
1
原创 C++单调向量(栈):好子数组的最大分数
给你一个整数数组 nums (下标从 0 开始)和一个整数 k 。一个子数组 (i, j) 的 分数 定义为 min(nums[i], nums[i+1], ..., nums[j]) * (j - i + 1) 。一个 好 子数组的两个端点下标需要满足 i
2023-11-29 07:00:00
148
5
原创 C++二分查找、离线算法:最近的房间
一个酒店里有 n 个房间,这些房间用二维整数数组 rooms 表示,其中 rooms[i] = [roomIdi, sizei] 表示有一个房间号为 roomIdi 的房间且它的面积为 sizei 。每一个房间号 roomIdi 保证是 独一无二 的。同时给你 k 个查询,用二维数组 queries 表示,其中 queries[j] = [preferredj, minSizej] 。第 j 个查询的答案是满足如下条件的房间 id :房间的面积 至少 为 minSizej ,且abs(id - pre
2023-11-29 06:45:00
93
原创 C++二分查找或并集查找:交换得到字典序最小的数组
给你一个下标从 0 开始的 正整数 数组 nums 和一个 正整数 limit 。在一次操作中,你可以选择任意两个下标 i 和 j,如果 满足 |nums[i] - nums[j]|
2023-11-28 07:00:00
145
7
原创 C++二分查找视频教程:两数之和
给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1
2023-11-28 06:45:00
61
原创 利用广度优先或模拟解决米诺骨牌
n 张多米诺骨牌排成一行,将每张多米诺骨牌垂直竖立。在开始时,同时把一些多米诺骨牌向左或向右推。每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌。同样地,倒向右边的多米诺骨牌也会推动竖立在其右侧的相邻多米诺骨牌。如果一张垂直竖立的多米诺骨牌的两侧同时有多米诺骨牌倒下时,由于受力平衡, 该骨牌仍然保持不变。就这个问题而言,我们会认为一张正在倒下的多米诺骨牌不会对其它正在倒下或已经倒下的多米诺骨牌施加额外的力。给你一个字符串 dominoes 表示这一行多米诺骨牌的初始状态,其中:domin
2023-11-27 11:30:00
748
105
原创 C++前缀和算法:统计美丽子字符串
给你一个字符串 s 和一个正整数 k 。用 vowels 和 consonants 分别表示字符串中元音字母和辅音字母的数量。如果某个字符串满足以下条件,则称其为 美丽字符串 :vowels == consonants,即元音字母和辅音字母的数量相等。(vowels * consonants) % k == 0,即元音字母和辅音字母的数量的乘积能被 k 整除。返回字符串 s 中 非空美丽子字符串 的数量。子字符串是字符串中的一个连续字符序列。英语中的 元音字母 为 'a'、'e'、'
2023-11-27 07:00:00
258
原创 C++二分查找:统计点对的数目
给你一个无向图,无向图由整数 n ,表示图中节点的数目,和 edges 组成,其中 edges[i] = [ui, vi] 表示 ui 和 vi 之间有一条无向边。同时给你一个代表查询的整数数组 queries 。第 j 个查询的答案是满足如下条件的点对 (a, b) 的数目:a < bcnt 是与 a 或者 b 相连的边的数目,且 cnt 严格大于 queries[j] 。请你返回一个数组 answers ,其中 answers.length == queries.length 且 answer
2023-11-26 09:32:59
155
4
原创 C++双指针算法:统计点对的数目
给你一个无向图,无向图由整数 n ,表示图中节点的数目,和 edges 组成,其中 edges[i] = [ui, vi] 表示 ui 和 vi 之间有一条无向边。同时给你一个代表查询的整数数组 queries 。第 j 个查询的答案是满足如下条件的点对 (a, b) 的数目:a < bcnt 是与 a 或者 b 相连的边的数目,且 cnt 严格大于 queries[j] 。请你返回一个数组 answers ,其中 answers.length == queries.length 且 answer
2023-11-26 09:30:26
77
1
原创 C++动态规划算法:最多可以参加的会议数目
给你一个 events 数组,其中 events[i] = [startDayi, endDayi, valuei] ,表示第 i 个会议在 startDayi 天开始,第 endDayi 天结束,如果你参加这个会议,你能得到价值 valuei 。同时给你一个整数 k 表示你能参加的最多会议数目。你同一时间只能参加一个会议。如果你选择参加某个会议,那么你必须 完整 地参加完这个会议。会议结束日期是包含在会议内的,也就是说你不能同时参加一个开始日期与另一个结束日期相同的两个会议。请你返回能得到的会议价值
2023-11-25 07:00:00
310
10
原创 C++算法:字符串中的查找与替换
你会得到一个字符串 s (索引从 0 开始),你必须对它执行 k 个替换操作。替换操作以三个长度均为 k 的并行数组给出:indices, sources, targets。要完成第 i 个替换操作:检查 子字符串 sources[i] 是否出现在 原字符串 s 的索引 indices[i] 处。如果没有出现, 什么也不做 。如果出现,则用 targets[i] 替换 该子字符串。例如,如果 s = "abcd" , indices[i] = 0 , sources[i] = "ab", ta
2023-11-25 06:45:00
170
1
原创 C++二分向量算法:最多可以参加的会议数目 II
给你一个 events 数组,其中 events[i] = [startDayi, endDayi, valuei] ,表示第 i 个会议在 startDayi 天开始,第 endDayi 天结束,如果你参加这个会议,你能得到价值 valuei 。同时给你一个整数 k 表示你能参加的最多会议数目。你同一时间只能参加一个会议。如果你选择参加某个会议,那么你必须 完整 地参加完这个会议。会议结束日期是包含在会议内的,也就是说你不能同时参加一个开始日期与另一个结束日期相同的两个会议。请你返回能得到的会议价值
2023-11-24 07:00:00
424
13
原创 C++二分算法:最多可以参加的会议数目 II
给你一个 events 数组,其中 events[i] = [startDayi, endDayi, valuei] ,表示第 i 个会议在 startDayi 天开始,第 endDayi 天结束,如果你参加这个会议,你能得到价值 valuei 。同时给你一个整数 k 表示你能参加的最多会议数目。你同一时间只能参加一个会议。如果你选择参加某个会议,那么你必须 完整 地参加完这个会议。会议结束日期是包含在会议内的,也就是说你不能同时参加一个开始日期与另一个结束日期相同的两个会议。请你返回能得到的会议价值
2023-11-24 06:45:00
210
原创 C++二分算法:得到子序列的最少操作次数
给你一个数组 target ,包含若干 互不相同 的整数,以及另一个整数数组 arr ,arr 可能 包含重复元素。每一次操作中,你可以在 arr 的任意位置插入任一整数。比方说,如果 arr = [1,4,1,2] ,那么你可以在中间添加 3 得到 [1,4,3,1,2] 。你可以在数组最开始或最后面添加整数。请你返回 最少 操作次数,使得 target 成为 arr 的一个子序列。一个数组的 子序列 指的是删除原数组的某些元素(可能一个元素都不删除),同时不改变其余元素的相对顺序得到的数组。比方说
2023-11-23 07:15:00
1448
119
原创 C++单调向量算法:得到山形数组的最少删除次数
我们定义 arr 是 山形数组 当且仅当它满足:arr.length >= 3存在某个下标 i (从 0 开始) 满足 0 < i < arr.length - 1 且:arr[0] < arr[1] < ... < arr[i - 1] < arr[i]arr[i] > arr[i + 1] > ... > arr[arr.length - 1]给你整数数组 nums ,请你返回将 nums 变成 山形状数组 的 最少 删除次数。
2023-11-23 06:53:33
168
原创 C++二分算法:得到山形数组的最少删除次数
我们定义 arr 是 山形数组 当且仅当它满足:arr.length >= 3存在某个下标 i (从 0 开始) 满足 0 < i < arr.length - 1 且:arr[0] < arr[1] < ... < arr[i - 1] < arr[i]arr[i] > arr[i + 1] > ... > arr[arr.length - 1]给你整数数组 nums ,请你返回将 nums 变成 山形状数组 的 最少 删除次数。
2023-11-22 06:45:00
180
2
原创 C++二分算法:找到最接近目标值的函数值
Winston 构造了一个如上所示的函数 func 。他有一个整数数组 arr 和一个整数 target ,他想找到让 |func(arr, l, r) - target| 最小的 l 和 r 。请你返回 |func(arr, l, r) - target| 的最小值。请注意, func 的输入参数 l 和 r 需要满足 0
2023-11-21 06:45:00
234
[二分查找双指针]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
如果我当上技术经理如何开展工作
2019-01-06
最短点对演示程序
2018-12-31
墨家巡逻兵1.0.2、编辑器、源码
2018-11-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人