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

原创 利用广度优先或模拟解决米诺骨牌
n 张多米诺骨牌排成一行,将每张多米诺骨牌垂直竖立。在开始时,同时把一些多米诺骨牌向左或向右推。每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌。同样地,倒向右边的多米诺骨牌也会推动竖立在其右侧的相邻多米诺骨牌。如果一张垂直竖立的多米诺骨牌的两侧同时有多米诺骨牌倒下时,由于受力平衡, 该骨牌仍然保持不变。就这个问题而言,我们会认为一张正在倒下的多米诺骨牌不会对其它正在倒下或已经倒下的多米诺骨牌施加额外的力。给你一个字符串 dominoes 表示这一行多米诺骨牌的初始状态,其中:domin
2023-11-27 11:30:00
564
92

原创 C++二分算法:得到子序列的最少操作次数
给你一个数组 target ,包含若干 互不相同 的整数,以及另一个整数数组 arr ,arr 可能 包含重复元素。每一次操作中,你可以在 arr 的任意位置插入任一整数。比方说,如果 arr = [1,4,1,2] ,那么你可以在中间添加 3 得到 [1,4,3,1,2] 。你可以在数组最开始或最后面添加整数。请你返回 最少 操作次数,使得 target 成为 arr 的一个子序列。一个数组的 子序列 指的是删除原数组的某些元素(可能一个元素都不删除),同时不改变其余元素的相对顺序得到的数组。比方说
2023-11-23 07:15:00
1362
118
原创 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
原创 C++二分查找或并集查找:交换得到字典序最小的数组
给你一个下标从 0 开始的 正整数 数组 nums 和一个 正整数 limit 。在一次操作中,你可以选择任意两个下标 i 和 j,如果 满足 |nums[i] - nums[j]|
2023-11-28 07:00:00
113
6
原创 C++二分查找视频教程:两数之和
给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1
2023-11-28 06:45:00
32
原创 C++前缀和算法:统计美丽子字符串
给你一个字符串 s 和一个正整数 k 。用 vowels 和 consonants 分别表示字符串中元音字母和辅音字母的数量。如果某个字符串满足以下条件,则称其为 美丽字符串 :vowels == consonants,即元音字母和辅音字母的数量相等。(vowels * consonants) % k == 0,即元音字母和辅音字母的数量的乘积能被 k 整除。返回字符串 s 中 非空美丽子字符串 的数量。子字符串是字符串中的一个连续字符序列。英语中的 元音字母 为 'a'、'e'、'
2023-11-27 07:00:00
230
原创 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
147
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
58
原创 C++动态规划算法:最多可以参加的会议数目
给你一个 events 数组,其中 events[i] = [startDayi, endDayi, valuei] ,表示第 i 个会议在 startDayi 天开始,第 endDayi 天结束,如果你参加这个会议,你能得到价值 valuei 。同时给你一个整数 k 表示你能参加的最多会议数目。你同一时间只能参加一个会议。如果你选择参加某个会议,那么你必须 完整 地参加完这个会议。会议结束日期是包含在会议内的,也就是说你不能同时参加一个开始日期与另一个结束日期相同的两个会议。请你返回能得到的会议价值
2023-11-25 07:00:00
305
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
134
1
原创 C++二分向量算法:最多可以参加的会议数目 II
给你一个 events 数组,其中 events[i] = [startDayi, endDayi, valuei] ,表示第 i 个会议在 startDayi 天开始,第 endDayi 天结束,如果你参加这个会议,你能得到价值 valuei 。同时给你一个整数 k 表示你能参加的最多会议数目。你同一时间只能参加一个会议。如果你选择参加某个会议,那么你必须 完整 地参加完这个会议。会议结束日期是包含在会议内的,也就是说你不能同时参加一个开始日期与另一个结束日期相同的两个会议。请你返回能得到的会议价值
2023-11-24 07:00:00
405
13
原创 C++二分算法:最多可以参加的会议数目 II
给你一个 events 数组,其中 events[i] = [startDayi, endDayi, valuei] ,表示第 i 个会议在 startDayi 天开始,第 endDayi 天结束,如果你参加这个会议,你能得到价值 valuei 。同时给你一个整数 k 表示你能参加的最多会议数目。你同一时间只能参加一个会议。如果你选择参加某个会议,那么你必须 完整 地参加完这个会议。会议结束日期是包含在会议内的,也就是说你不能同时参加一个开始日期与另一个结束日期相同的两个会议。请你返回能得到的会议价值
2023-11-24 06:45:00
186
原创 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
162
原创 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
172
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
225
原创 C++二分查找算法:有序矩阵中的第 k 个最小数组和
给你一个 m * n 的矩阵 mat,以及一个整数 k ,矩阵中的每一行都以非递减的顺序排列。你可以从每一行中选出 1 个元素形成一个数组。返回所有可能数组中的第 k 个 最小 数组和。
2023-11-20 07:00:00
890
103
原创 C++二分查找算法:找到 Alice 和 Bob 可以相遇的建筑
给你一个下标从 0 开始的正整数数组 heights ,其中 heights[i] 表示第 i 栋建筑的高度。如果一个人在建筑 i ,且存在 i < j 的建筑 j 满足 heights[i] < heights[j] ,那么这个人可以移动到建筑 j 。给你另外一个数组 queries ,其中 queries[i] = [ai, bi] 。第 i 个查询中,Alice 在建筑 ai ,Bob 在建筑 bi 。请你能返回一个数组 ans ,其中 ans[i] 是第 i 个查询中,Alice 和 B
2023-11-20 06:45:00
239
2
原创 C++二分查找算法:查找和最小的 K 对数字
给定两个以 非递减顺序排列 的整数数组 nums1 和 nums2 , 以及一个整数 k。定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2。请找到和最小的 k 个数对 (u1,v1), (u2,v2) … (uk,vk)。
2023-11-19 07:00:00
557
30
原创 C++二分算法:使数组严格递增
给你两个整数数组 arr1 和 arr2,返回使 arr1 严格递增所需要的最小「操作」数(可能为 0)。每一步「操作」中,你可以分别从 arr1 和 arr2 中各选出一个索引,分别为 i 和 j,0
2023-11-17 07:00:00
415
5
原创 C++二分查找算法:规划兼职工作
你打算利用空闲时间来做兼职工作赚些零花钱。这里有 n 份兼职工作,每份工作预计从 startTime[i] 开始到 endTime[i] 结束,报酬为 profit[i]。给你一份兼职工作表,包含开始时间 startTime,结束时间 endTime 和预计报酬 profit 三个数组,请你计算并返回可以获得的最大报酬。注意,时间上出现重叠的 2 份工作不能同时进行。如果你选择的工作在时间 X 结束,那么你可以立刻进行在时间 X 开始的下一份工作。
2023-11-17 06:45:00
161
1
原创 C++二分查找算法:数组中占绝大多数的元素
设计一个数据结构,有效地找到给定子数组的 多数元素。子数组的 多数元素 是在子数组中出现 threshold 次数或次数以上的元素。实现 MajorityChecker 类:MajorityChecker(int[] arr) 会用给定的数组 arr 对 MajorityChecker 初始化。
2023-11-16 06:45:00
187
原创 C++ 二分查找算法:山脉数组中查找目标值
给你一个 山脉数组 mountainArr,请你返回能够使得 mountainArr.get(index) 等于 target 最小 的下标 index 值。如果不存在这样的下标 index,就请返回 -1。 何为山脉数组?如果数组 A 是一个山脉数组的话,那它满足如下条件:首先,A.length >= 3其次,在 0 < i < A.length - 1 条件下,存在 i 使得:A[0] < A[1] < ... A[i-1] < A[i]A[i] > A[i+1] > ...
2023-11-15 17:15:00
94
6
原创 C++二分查找算法:最大为 N 的数字组合
给定一个按 非递减顺序 排列的数字数组 digits 。你可以用任意次数 digits[i] 来写的数字。例如,如果 digits = ['1','3','5'],我们可以写数字,如 '13', '551', 和 '1351315'。返回 可以生成的小于或等于给定整数 n 的正整数的个数 。
2023-11-15 07:00:00
325
7
原创 C++算法:全 O(1) 的数据结构
请你设计一个用于存储字符串计数的数据结构,并能够返回计数最小和最大的字符串。实现 AllOne 类:AllOne() 初始化数据结构的对象。inc(String key) 字符串 key 的计数增加 1。如果数据结构中尚不存在 key ,那么插入计数为 1 的 key。dec(String key) 字符串 key 的计数减少 1。如果 key 的计数在减少后为 0 ,那么需要将这个 key 从数据结构中删除。测试用例保证:在减少计数前,key 存在于数据结构中。
2023-11-14 17:44:33
285
原创 C++字典树算法:找出强数对的最大异或值 II
给你一个下标从 0 开始的整数数组 nums 。如果一对整数 x 和 y 满足以下条件,则称其为 强数对 :|x - y|
2023-11-14 07:00:00
785
40
原创 C++算法: 最大化数组末位元素的最少操作次数
给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,这两个数组的长度都是 n 。你可以执行一系列 操作(可能不执行)。在每次操作中,你可以选择一个在范围 [0, n - 1] 内的下标 i ,并交换 nums1[i] 和 nums2[i] 的值。你的任务是找到满足以下条件所需的 最小 操作次数:nums1[n - 1] 等于 nums1 中所有元素的 最大值 ,即 nums1[n - 1] = max(nums1[0], nums1[1], ..., nums1[n - 1]) 。n
2023-11-13 17:55:43
217
4
原创 C++二分查找算法:132 模式枚举3
给你一个整数数组 nums ,数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k] 组成,并同时满足:i < j < k 和 nums[i] < nums[k] < nums[j] 。如果 nums 中存在 132 模式的子序列 ,返回 true ;否则,返回 false 。
2023-11-13 07:00:00
811
108
原创 C++算法:完美矩形
给你一个数组 rectangles ,其中 rectangles[i] = [xi, yi, ai, bi] 表示一个坐标轴平行的矩形。这个矩形的左下顶点是 (xi, yi) ,右上顶点是 (ai, bi) 。如果所有矩形一起精确覆盖了某个矩形区域,则返回 true ;否则,返回 false 。
2023-11-12 16:49:11
159
6
原创 C++算法:包含三个字符串的最短字符串
给你三个字符串 a ,b 和 c , 你的任务是找到长度 最短 的字符串,且这三个字符串都是它的 子字符串 。如果有多个这样的字符串,请你返回 字典序最小 的一个。请你返回满足题目要求的字符串。注意:两个长度相同的字符串 a 和 b ,如果在第一个不相同的字符处,a 的字母在字母表中比 b 的字母 靠前 ,那么字符串 a 比字符串 b 字典序小 。子字符串 是一个字符串中一段连续的字符序列。
2023-11-12 16:34:47
89
原创 C++算法:矩阵中的最长递增路径
给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)。
2023-11-11 18:48:04
512
6
原创 一题三解(暴力、二分查找算法、单指针):鸡蛋掉落
给你 k 枚相同的鸡蛋,并可以使用一栋从第 1 层到第 n 层共有 n 层楼的建筑。已知存在楼层 f ,满足 0
2023-11-11 07:00:00
467
28
原创 C++二分查找算法的应用:第 N 个神奇数字
一个正整数如果能被 a 或 b 整除,那么它是神奇的。给定三个整数 n , a , b ,返回第 n 个神奇的数字。因为答案可能很大,所以返回答案 对 109 + 7 取模 后的值。
2023-11-10 07:00:00
106
13
原创 C++二分查找算法:阶乘函数后 K 个零
f(x) 是 x! 末尾是 0 的数量。回想一下 x! = 1 * 2 * 3 * ... * x,且 0! = 1 。例如, f(3) = 0 ,因为 3! = 6 的末尾没有 0 ;而 f(11) = 2 ,因为 11!= 39916800 末端有 2 个 0 。给定 k,找出返回能满足 f(x) = k 的非负整数 x 的数量。
2023-11-10 06:45:00
164
原创 C++二分算法:水位上升的泳池中游泳
在一个 n x n 的整数矩阵 grid 中,每一个方格的值 grid[i][j] 表示位置 (i, j) 的平台高度。当开始下雨时,在时间为 t 时,水池中的水位为 t 。你可以从一个平台游向四周相邻的任意一个平台,但是前提是此时水位必须同时淹没这两个平台。假定你可以瞬间移动无限距离,也就是默认在方格内部游动是不耗时的。当然,在你游泳的时候你必须待在坐标方格里面。你从坐标方格的左上平台 (0,0) 出发。返回 你到达坐标方格的右下平台 (n-1, n-1) 所需的最少时间 。
2023-11-09 07:00:00
1167
11
两数之和 - 输入有序数组
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
8邻域01模式和8联通性不同的情况
2017-09-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人