- 博客(128)
- 收藏
- 关注
原创 红黑树的实现及测试
4. 对于每个结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点。对于红黑树来说,最重要的依旧是插入操作,与AVL树不同的是,一个是插入完后。来分析 -> 即 p 是位于左还是位于右,操作起来是一样的,只不过要分开写。3. 如果一个节点是红色的,则它的两个孩子结点是黑色的。5. 每个叶子结点都是黑色的(此处的叶子结点指的是空结点)可以先记录最左边一条路的黑色节点个数,然后去递归每一条路,最后显示的结果也是平衡,那就大概率没有逻辑上的问题了。,若不相同,则返回false,递归同时,
2024-08-01 19:40:42
650
原创 栈和队列以及优先级队列
他的底层结构为堆,因此与堆的实现非常相似,无非就是加上了一层封装。栈的实现非常简单,因为所有函数都可以去调用,适配器默认为。在堆中最重要的两个结构无非就是。与栈的实现类似,只不过是。
2024-07-01 18:45:39
169
原创 二叉搜索树的实现与测试
BSTree(二叉搜索树)是一个神奇的数据结构,其的特点是,左子树的所有值比根小,而右子树的所有值比根大根据这种特性,我们可以从该结构中快速的搜索一个数的存在,速度则为树的高度次。
2024-07-01 13:10:26
438
原创 C++笔试强训day42
若种类的范围为 【1,x】的话,则满足条件的数组区间内方案数则为。每个值代表一种面值的货币,每种面值的货币可以使用任意张。,因此可以将种类范围想办法变为【1,x】,最后用。因为b >= a,所以可以在遍历数组的时候。滑动窗口遍历数组:(
2024-06-09 22:40:24
1166
1
原创 C++笔试强训day39
看输出描述即可知输出次数最多的那个字母即可。即为哈夫曼编码:与该篇中的模版题极为相似-》当然,也可以进行空间优化。搞清楚他的状态表示{
2024-06-05 20:13:47
1185
原创 C++笔试强训day38
dp[i][j] :从前i个中挑选,总和 % k == j时,最大总和为多少。有了这几点,状态转移方程就非常好推了,只需要注意一下非法值的初始化即可。一开始都可以想到将数组的前x个数拿出来排降序输出第二个数即可。因此就可以推出前一个状态为的 j 为 j - a[i] % k。1.顺时针旋转180° -》列对称一遍再行对称一遍。即(j - a[i] % k + k)% k(又因为可能会出现相减之后出现负数,因此可以用。2.关于行镜像 -》如题意一样,行对称即可。
2024-06-04 21:23:43
823
原创 C++笔试强训day37
如果 A 字符串能够旋转之后得到 B 字符串的话,在 A 字符串倍增之后的新串中,⼀定是可以找到 B 字符串的。因此,我们仅需让 A 字符串倍增,然后查找 B 字符串即可。
2024-06-01 15:37:56
875
原创 C++笔试强训day35
b[j]时,在这三种情况中取最小值即可,因为有重复,所以可以简化,最后变为。根据这个规律,找到最后⼀次删除的起始位置的下标即可。,一开始我就看错了题目,直接双指针搜索了。当然,也有更简便的方法:(找规律)通过⼀两个例⼦的模拟,我们发现,
2024-05-28 19:40:57
982
原创 C++笔试强训day34
DFS:(我写的DFS目前还是没找到为什么有测试用例过不去)BFS / DFS(宽度 / 深度 优先遍历即可)BFS:(因为可以保证第一次找到的一定是最近的)提取题意,模拟一下即可。
2024-05-27 19:01:13
662
原创 C++笔试强训day33
若一个数从0 - > 1,那么则cnt++(cnt是窗口中字母的种类),若从1 - > 0,那么则cnt--。当cnt > 2时,就得出窗口了。然后就是找个合适的位置更新返回值。
2024-05-26 16:15:02
758
原创 C++笔试强训day32
然后若 i 的开始时间小于 end,则更新end = min(end,i的结束时间),{取最小值的原因是贪心(要选择尽可能多的活动数量)}很细节的一个地方是他的初始化,因为你不确定有没有负数,若是默认初始化(0),则会导致一个全为负数的数组中返回 0 ,这样是答案错误。现将其转化为回文数(这里用字符串存储比较方便转化),然后判断是否为素数即可。若 i 的开始时间大于或等于 end,直接让活动数 +1。因为状态表示是最后一个人必须,所以我们选取返回值时,若搞清楚了该题的状态表示,还是可以做一下题目的。
2024-05-25 11:59:38
929
原创 C++笔试强训day31
1.当全都选二人船时,最后有余数(即剩下一个人),大部分人都是分两种情况,要么他坐二人的,要么坐三人的,但是还有另一种情况,根据题意便可知,每次都要去取出目前让自己舒适感最低的口罩,所以可以用优先队列来实现。2.同样,都选三人船时,最后有余数,前面博客有类似题目 - 》(
2024-05-24 13:26:38
884
原创 C++笔试强训day30
两个数组之间的dp问题,主要是能搞清楚状态表示,后面就好思考了。数学找规律题,注意开long long即可,因为数据太大。
2024-05-22 16:30:26
606
原创 C++笔试强训day24
我的思路是构建二维前缀和,然后再遍历所有的子矩阵,但是我遍历子矩阵有错误,没遍历到全部,所有一直过不了。固定滑动窗口,每次都遍历长度为n / 2的窗口。判断是不是平衡⼆叉树。
2024-05-15 20:58:47
541
原创 C++笔试强训day21
方法一:一开始我想复杂了,其实用试错法去试(试多几种方法),最后发现可以直接交换该数和其后面的一个数即可。哈希表存储,从1 往 n 遍历,只要cnt[i]!= 0,就存入ret(数组)。简单叙述就是每个数的左右两边不能一个比他大,一个比他小。反之,就是要让每个数的左右两边数都大于或者都小于他。利用set的特性,直接读入,然后打印。一道动态规划 - 区间dp题目。放个⼩的之后,再放个⼤的。最后遍历数组打印即可。
2024-05-14 16:00:53
430
原创 C++笔试强训day20
若从0和n - 1往中间遍历,存在不相同,即可直接break返回 n (个数)。即这时个对称数,但是如果你取除第一个或最后一个外的所有字符,即可组成非对称。我认为这就是一道数学分析找规律题,暴力强解复杂度太高,易超时,解不出来。dp[i], 以i为结尾,可以表示的最大数值。除完之后有无余数,若有,则还可以再挨一次打。填完表后,遍历一遍表中的数,取出最大值即可。题目有要求要最大,所以为 n - 1。若全相同,则返回 n - 1。若字符全相同,则返回0。经此一役小红所向无敌。
2024-05-12 17:31:22
345
原创 C++笔试强训day19
我们可以从两边开始(一个下标为0, 一个下标为 n - 1)开始遍历,如果一路遍历下来,所有的。模拟就行,唯一可能是难点得就是gcd(最大公约数)中都有相同的字符,则返回Yes,若有一个没有则No。动态规划 - 路径问题。
2024-05-12 17:07:46
323
原创 C++笔试强训day18
比较规则是:首先比较第二个元素的值,如果它们不相等,则按照第二个元素的值从大到小排序;2.当数量超过 9 时,需要逐个拿出 n 的位数,如153次,需要拿出1、5、3三个数。,则按照第一个元素的值从小到大排序。1.数量为一个时不用输出个数。
2024-05-11 17:09:52
495
原创 C++笔试强训day17
存储快乐值和羞耻度的前缀和,然后快乐值总和 sum1 = h[r] - h[l - 1];羞耻度总和 sum2 = s[r] - s[l - 1];注意:要开long long,因为数据量太大。然后一遍一遍更新出maxh和mins和L即可。简单把他当成字符串遍历即可。
2024-05-11 16:09:20
430
原创 C++笔试强训day16
一个检查是否为质数的函数,一个检查是否为神奇数的函数。我的思路是遍历所有长度为n的子串,找到比例最高的一串。替换完之后别忘了后面的剩余字符。然后for循环遍历数组即可。注意细节:不要出现前导0。类似固定长度滑动窗口。
2024-05-10 09:31:04
448
原创 C++笔试强训day15
返回值则是g <= m, 因为大于m就不满足题意,小于m的话可以通过无限分组(拆开那些同一个声部)来实现。3.BFS遍历,取数出来 cout 然后,将该数连接的线去除。因为n是 >= m的,将n完全拆开是肯定可以拼凑出m组的。同时若出现入度为 1 的数,接着存入队列。一道拓扑排序模板题,了解过拓扑排序就能很简单写出来。数学找规律,找离 x 最近的完全平方数 y。从左往右遍历大数据很有可能超时,这时就要去。2.将入度为 0 的数存入队列。,因为求的是最多小组人数。
2024-05-08 22:37:13
479
原创 C++笔试强训day13
如上图,若是多出一个C,必然不可能重排,即C的数量 >(n + 1) / 2的话,直接输出noi就行了。简单逻辑题,按照题目意思模拟就能过。找到填入规律就很好办,先。
2024-05-04 21:17:01
464
原创 C++笔试强训day12
则第i个位置的sh个数则为(i - 1位置的sh个数)加上(i - 1位置的s个数 * 1个h)。我的思路是找出长度差值,然后让长的先走差值步数,这样就可以让他们同时出发,我做的题目太少了,最多就做过两个状态的dp,结果就没有考虑dp方面。正解为多(3)状态dp问题,处理好初始化细节就可以。暴力枚举就行,也可以用哈希表,哈希更省一点时间。y[i] : 前 i 个数有几个shy。s[i] : 前 i 个数有几个s。h[i] :前 i 个数有几个sh。比如前i - 1个位置有n个s,mari和shiny。
2024-05-01 23:27:19
1043
1
原创 C++笔试强训day11
所以从第二天开始遍历,只要prices【i】 > prices【i - 1】就可以加到利润中去(当然你也可以一开始读取整个句子,逆置这个句子后,再去句子里将每个单词逆置。我的做法是用vector存储这些string然后逆置,方便高效且快捷。一开始很多人想的肯定是贪心,但是最后总会有几个样例过不了。细节:可多次卖出,但购买前必须卖出之前的。
2024-04-30 14:40:56
468
原创 C++栈和队列模拟
栈和队列所用的容器默认都为deque,这种容器可以看作是一种vector和list的中间性能容器。2.[ ]访问的效率不够极致。1.中间插入删除会很麻烦。
2024-04-30 08:57:25
251
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人