- 博客(32)
- 问答 (1)
- 收藏
- 关注
原创 【C++学习第15天】STL
和上面类似,增删改查的时间复杂度是 O(1),而除此之外上面的增删改查的时间复杂度是 O(logn),但支持和排序有关的操作。不支持 lower_bound() / upper_bound()、迭代器的++和--值得注意的是,queue没有clear()操作。
2024-05-12 22:22:56 654
原创 【C++学习第14天】(2)字符串前缀哈希法
以"ABCD"为例,假设该字符串时P进制,将其转化为数字为(1 2 3 4)p = (1*p^1 + 2*p^2 + 3*p^3 + 4*p^4),(1*p^1 + 2*p^2 + 3*p^3 + 4*p^4)mod Q可将任何一个数映射到[0, Q-1]之间。(1)一般情况下,不能把一个字符串映射为0,因为可能会造成“多对一”的情况,因此最好从1开始;(2)经验值:当P=131或13331,Q=2^64时,基本不会发生冲突。
2024-05-12 10:30:00 598
原创 【C++学习第14天】(1)哈希表第二种实现方式:开放寻址法
假设哈希表的范围为:[0, N],初始化一个尺寸在2N或者3N的一维数组,当需要插入一个数x时,从前往后依次寻找空闲位置,并将 x 插入其中。
2024-05-11 20:05:31 125
原创 【C++学习第13天】(2)哈希表
将一个较大的值域映射到一个比较小的空间,一般情况是映射到 0~N,N一般较小,大约为10^5 ~ 10^6。例如,将 [-10^9, 10^9]映射到[0, 10^5]。
2024-05-09 17:57:43 123
原创 【C++学习第13天】(1)模拟堆
acwing平台 -- 839.模拟堆:维护一个集合,初始时集合为空,支持如下几种操作:1. “I x”,插入一个数x;2. “PM”:输出当前集合中的最小值;3. “DM”:删除当前集合中的最小值,当最小值不唯一时,删除最早插入的最小值;4. “D k”删除第k个插入的数;5. “C k x”:修改第k个插入的树,将其变为x;现在要进行N次操作,对于所有第2个操作,输出当前集合的最小值。第一行包含整数N。接下来N行,每行包含一个操作指令。
2024-05-09 16:19:44 150
原创 【C++学习第12天】(1)并查集
1.将两个集合合并;2.询问两个元素是否在一个集合中。:每个集合用一棵树来表示,树根的编号就是整个集合的编号,每个节点存储它的父节点,p[x]表示 x 的父节点。:路径压缩。:如何判断树根:if(p[x] == x):如何求x的集合编号:while(p[x]!:如何合并两个集合:px是x的集合编号,py是y的集合编号。p[x] = y。
2024-05-08 11:08:42 144 1
原创 【C++学习第11天】Trie树
Trie(又称字典树、前缀树)是一种用于高效存储和检索字符串集合的数据结构。总之,Trie树是一种高效的数据结构,特别适用于处理字符串集合和相关问题。它提供了快速的插入、查找和删除操作,可以应用于自动完成、拼写检查、字符串排序、字符串统计等各种应用场景。
2024-05-06 21:13:54 163
原创 【C++学习第十天】再看KMP算法
下面这篇博客写的非常简单易懂,看了两三遍终于看懂了!如何更好地理解和掌握 KMP 算法?- 海纳的回答 - 知乎。
2024-04-29 21:53:14 59
原创 【C++学习第八天】(4)单调栈
单调栈(Monotonic Stack)是一种数据结构,用于解决一类与单调性相关的问题。它的主要特点是栈中的元素保持单调(递增或递减)的顺序排列。单调栈通常基于栈这种数据结构实现,但在入栈和出栈操作时会有一些特定的规则。对于单调递增栈,栈内的元素从栈底到栈顶按照递增顺序排列,而单调递减栈则相反,栈内的元素从栈底到栈顶按照递减顺序排列。
2024-04-18 17:46:16 231 1
原创 【C++学习第八天】(3)队列
队列,顾名思义,就是类似于排队的方式来存储数据,符合先进先出的原则。可以将其看作是一个管道,水流从一端流入,从另一端流出。
2024-04-18 16:34:57 188 1
原创 【C++学习第八天】(2)栈
栈只有一端可以进出数据,满足先进后出的原则,如果想要删除元素的话,只能从顶部元素开始依次删除。相对于链表而言,栈的操作还是简单很多的。
2024-04-18 16:24:53 159 1
原创 【C++学习第八天】(1)双链表
除了首尾两个结点之外,双链表中的每一个结点都有两个指针,其中一个指针指向左边的结点,另一个指针指向右边的结点。
2024-04-18 16:06:56 548 1
原创 【C++学习第六天】(3)区间合并
区间合并指将一组具有重叠或相邻区间的集合,通过合并相交的区间,得到一个不重叠且尽可能合并的新区间集合。例如,区间:[0, 2]、[1, 6]、[7, 9]、[10, 15]、[12, 20],以上五个区间的合并结果为[0, 6]、[7, 9]、[10, 20]。
2024-04-16 17:27:00 190
原创 【C++学习第六天】(2)离散化
离散化的本质是数据压缩,即将无限空间中的有限个元素映射到一个有限的空间中,在不改变数据相对大小的情况下对数据进行压缩。
2024-04-16 15:42:59 231
原创 【C++学习第六天】(1)双指针算法
双指针算法是一种常用的算法技巧,通常用于解决涉及数组、链表或字符串等数据结构的问题。该算法使用在序列中进行迭代。双指针算法主要有两个用途:(1)使用两个指针来维护一段区间;(2)对于两个序列,使用两个指针来维护某种顺序。
2024-04-16 10:33:10 300
原创 【C++学习第四天】(3)高精度除以低精度
需要注意的是,最后的结果中,C中的最高位是结果的最低位,C中的最低位是结果的最高位,需要进行reverse操作。与低精度数相除,得到商和余数。商是当前位的计算结果,余数是当前位的除法运算过程中剩余的未被除尽的部分。对下一位进行除法运算,依次类推,直到高精度数的所有位都被处理完毕。与高精度减法一样,最后的结果仍然需要消除“前导零”。最终得到的商即为高精度数除以低精度数的结果。将商存储起来,并将余数作为下一位的被除数。从高精度数的最高位开始,将当前位。
2024-04-11 17:30:39 240 1
原创 【C++学习第四天】(2)高精度乘低精度
A是高精度,数据类型是vector<int>,b是低精度,数据类型是int。算法过程为:从A的低位开始,每一位与b相乘,第 i 位的进位用 t[i] 表示,第 i 位的结果用C[i]表示,其中。
2024-04-11 16:37:31 179 1
原创 【C++学习第四天】(1)高精度减法
高精度减法与高精度加法类似,使用两个数组A和B分别存储两个长度较长的数,其中A[0]存储最低位,A[n-1]存储最高位。从低位开始运算,即使用A[0]减去B[0],如果结果小于0,则需要从A[1]位借位,最后的结果是A[0]+10-B[0]。接着计算下一位,即A[1]-B[1]-1,需要注意的是,由于之前A[1]已经被借走一位了,所以此处需要再减去1,因此可以使用变量 t 表示某位是否曾被借位,若被借位,则 t = 1,否则 t = 0;
2024-04-11 15:43:18 169 1
原创 【C++学习第三天】(2)高精度加法
高精度加法是一种用于处理大整数相加的算法,它可以克服常规整数类型的位数限制,支持对任意长度的大整数进行加法运算。高精度加法的实现原理如下:首先,将两个大整数按照从低位到高位的顺序进行逐位相加。从最低位开始,将对应位上的数字相加,同时考虑进位。使用一个进位变量来记录当前位相加后的进位值。初始时进位为0。逐位相加过程中,将当前位的数值与进位值相加,得到当前位的结果值。同时更新进位值。如果两个大整数的位数不一致,需要在较短的整数的高位补零,以保持对应位的对齐。继续处理下一位,直到处理完所有位。
2024-04-10 22:57:48 129
原创 【C++学习第三天】(1)二分算法
整数二分算法(Integer Binary Search Algorithm)是一种用于在有序整数数组中查找特定元素的搜索算法。它利用了数组已排序的特性,通过不断缩小搜索范围来快速定位目标元素的位置。整数二分算法的基本思想是将搜索区间分成两部分,然后确定目标元素可能存在的那一部分,并继续在该部分进行二分查找。时间复杂度为O(log n),其中n为数组的大小。由于每一次迭代都将搜索范围减半,因此算法的效率非常高。它在大规模的有序整数数组中查找目标元素时非常实用。
2024-04-10 21:51:36 189
空空如也
Qt creator启动报错,如何解决?
2022-02-26
TA创建的收藏夹 TA关注的收藏夹
TA关注的人