- 博客(15)
- 收藏
- 关注
原创 二 分 算 法
然而此题不太一样,对于速度从l到r,随着速度的增大,花费的时间就会越少,速度的区间和对应时间的区间的单调性是相反的,所以要求最小的速度,其实就是求第一个小于等于h的位置,此时应把二分搜索模板nums[mid]>=target;r=mid-1改为nums[mid]
2024-06-03 20:02:21
678
原创 前 缀 树
根据前缀信息来查询。比如当我们遍历完一些样本后,让你查询某一样本出现的次数,可以使用哈希表来查询,也可以使用前缀树来查询。但如果题目给你一个样本,让你查询以这个样本为前缀的样本的个数,这时就不能用哈希表来做了。前缀树的类实现:前缀树通常将字符放在路径上,节点上包含pass(经过当前字符的样本的个数)和end(以当前字符为结尾的样本的个数)优点是可以根据前缀信息来选择分支,节省时间;前缀树可以通过类实现或静态数组实现。
2024-05-09 15:43:12
146
1
原创 堆结构及堆排序
在建堆之前,我们要先搞清楚堆是怎么调整的,调整时需要对其父节点和子节点交换,这就需要我们知道父节点和子节点的关系,如果父节点的编号为i,那左孩子的编号为2*i,右孩子的编号为2*i+1;如果知道其左孩子或右孩子的编号为i,那它父节点的编号为i/2。以下操作都以大根堆为例。时间复杂度:因为是从顶到底建堆,第一个节点调整log1的高度,第二,三调整log2,log3的高度,所以其时间复杂度为log1+log2+....+logn,其趋向于n*logn的时间复杂度。
2024-04-17 14:52:57
205
原创 随机快速排序+随机选择算法
注:关于c语言中随机选择的函数rand需注意:rand()%(n)就会随机选取0~n-其头文件是#include(c++中也有自己的随机选择函数库)
2024-04-15 20:16:55
768
原创 倍增法求LCA
LCA问题:就是在一棵树中求两个节点的最近公共祖先(如果其中一个节点是另一个节点的祖先,那他们两个节点的最近公共祖先就是第一个节点)首先,关于这棵树的存储结构,我们可以采用邻接表或链式前向星来存储,这里我们采用链式前向星的方式来举例。1.我们可以逐步跳,此时的时间复杂度为O(n);以如下这棵树为例:求1和14节点的最近公共祖先。链式前向星板子:具体关于图的存储结构可以看。接下来是关于怎样求两个节点的最近祖先。
2024-04-10 16:55:53
414
1
原创 数位DP (第一次写,很乐意接受检阅)
如果我们从 7000 数到 7999、从 8000 数到 8999、和从 9000 数到 9999 的过程非常相似,它们都是后三位从 000 变到 999,不一样的地方只有千位这一位,所以我们可以把这些过程归并起来,将这些过程中产生的计数答案(计数答案根据题目要求来决定)也都存在一个通用的数组里。设置整数mask,mask|(1
2024-04-02 13:09:06
1206
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人