自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 散列(hash)表

hash表是一种搜索算法,可以根据hash函数和各元素的值来确定存储的位置,将位置保存在hash表中,以实现快速存储和查找。但是hash函数一般不可能完美,会产生多个值对应同一位置的情况,这就称作hash冲突。所以说hash表最重要的地方就是如何写hash函数能使发生hash冲突的可能性小和如何处理hash冲突。

2025-11-02 16:21:50 250

原创 数据结构--并查集

并查集是一种处理不相交集合合并与查询的树型数据结构。主要操作包括查询(find)和合并(join),并可通过路径压缩优化查询效率。典型应用包括判断连通性(如洛谷P3367)、统计连通块数量(AcWing 837)以及处理复杂关系(如食物链问题)。实现时需注意初始化、路径压缩和合并时的关系维护。核心思想是通过维护父节点指针实现高效集合操作,时间复杂度接近常数级。

2025-10-25 19:33:13 437

原创 STL string的常见用法

比较两字符串的大小,a<b返回-1,a==b返回0,a>b返回1,按字典序比较。用字符串替换从指定位置开始的指定长度的字符。从字符串末尾开始查找子串,从指定位置开始。将字符串b复制给从a开始的字符数组。返回指定位置的字符,不进行边界检查。删除从指定位置开始的指定长度的字符。在字符串中查找子串,从指定位置开始。返回从指定位置开始的指定长度的子串。返回指定位置的字符,进行边界检查。比较字符串的子串与另一字符串。将字符串赋值为另一个字符串。返回字符串的最后一个字符。返回字符串的第一个字符。在指定位置插入字符串。

2025-09-02 17:46:07 279

原创 Tire 树(字典树/前缀树)

本文介绍了Trie树(字典树)的基本概念及其应用。Trie树是一种用于高效存储和查询字符串集合的数据结构,通过共享前缀来节省空间。文章提供了两个典型模板题:1)字符串统计(AcWing 835),实现插入和查询操作;2)最大异或对(AcWing 143),利用Trie树存储二进制数进行高效异或计算。两个示例均包含完整代码实现,展示了Trie树在处理字符串和二进制数据时的应用技巧。

2025-05-04 20:20:01 385

原创 动态规划--提高(从集合的角度出发)

1.状态表示f[i,j]:(1)集合:表示从(1,1)到(i,j)的所有路线(2)属性:max/min/数量2.状态计算:集合的划分划分依据:“最后”划分原则:①不重:求数量时必须要满足,求max和min时可不满足,因为最值重复也没关系,还是最值。②不漏:一定要遵守以acwing 1015摘花生为例属性为max以最后一步f[i,j]为例划分,可划分为从上面来和从左边来。即f[i,j]=f[i-1,j]+w[i,j]和f[i,j]=f[i,j-1]+w[i,j];

2025-04-26 22:15:37 926

原创 堆--优先队列

堆,是一种实现优先队列的常用方式。

2025-04-20 11:16:09 233

原创 acwing--差分&&贪心

再给上面的一阶差分序列进行一次差分,变成原序列的二阶差分(c[i]=b[i]-b[i-1]):1,0,0,0……则可构造区间的一阶差分(b[i]=a[i]-a[i-1]):1,1,1,1。如此一来,可以将原来区间一段的变化变为这个区间开头数字的变化。所以可拓展为将y=x^k变为y=0要进行k+1阶差分。我们可以看出原序列符合y=x的线性递增关系…而二阶差分序列则只有一个值的变化其余y=0。给一段区间上加上:1,2,3,4。而其一阶差分序列符合y=c的关系。

2025-03-05 17:53:39 223

原创 数论--裴蜀定理

对于整数a和b,一定有正整数x,y使得ax+by=__gcd(a,b);可理解为将数组中所有数的最大公因数,如果能b整除则说明则说明必有解。

2025-03-01 17:13:09 244

原创 排列组合模板---A(n,m)和C(n,m)

在排列组合中A与C代表不同的概念代表的是“排列”(Arrangement 或者 Permutation),指的是从n个不同元素中取出m(1≤m≤n)个元素,按照一定的顺序排成一列,这种安排的方式称为排列。其计算公式为​代表的是“组合”(Combination),指的是从n个不同元素中取出m(1≤m≤n)个元素,不考虑顺序合成一组的方法数。组合的计算公式为,这里的选择不关心顺序,因此数目会少于排列的情况。简单来说,当问题涉及到顺序时使用排列(A),而当问题不涉及顺序时则使用组合(C)。

2025-02-07 16:53:03 2042

原创 KMP算法

KMP算法是一种高效的字符串匹配算法,利用模式串的前缀函数避免不必要的比较,将时间复杂度优化至O(m+n)。其核心是构建前缀数组pi,记录模式串各前缀的最长匹配真前后缀长度。在LeetCode 28和AcWing 831等题目中,可通过构造组合字符串并计算pi数组实现快速匹配。相比暴力匹配,KMP算法显著提升了效率。此外,C++的STL中的find函数也能实现简单字符串匹配,如PTA L1-101题所示,但效率不如KMP算法。KMP算法在需要高效字符串匹配的场景中具有重要应用价值。

2025-02-06 20:35:33 228

原创 日期问题--模板

例题:acwing-466. 回文日期。例题:acwing-3607.打印日期。四、给定年月日,求n天后的日期。二、判断某年某月的天数。一、判断日期是否合法。

2025-01-23 17:10:12 279

原创 C++---(标准模板库)STL

/typename:变量类型//注:如果typename为STL容器需在>>处加上空格​假设typename为int//两维都可变长//第一维固定。第二维可变长​队列优先队列大根堆小根堆。

2025-01-09 21:54:20 969

原创 acwing--dp--1--背包问题

四种背包:01背包、完全背包、多重背包和组合背包

2024-12-16 17:30:35 399

原创 acwing--dp--2--线性dp和区间dp

做法一:自上而下。注意:初始化要到i+1,因为状态计算的是左上和右上分别加上当前值的最大值。做法二:自下而上好处:不用最后遍历取最大值,因为最上面就一个。

2024-12-16 17:27:56 331

原创 st表--静态区间最值查询

st表是一种处理静态区间内求最值的数据结构。主要分为预处理和查询两部分,查询复杂度为O(1),用了动态规划的思想。

2024-12-15 09:46:16 253

原创 数论--欧拉函数

1.原理:欧拉函数可以通过质因数分解来计算。如果n可以质因数分解为p1^α1 * p2^α2 * ... * pk^αk,则φ(n) = n * (p1-1)/p1 * (p2-1)/p2 * ... * (pk-1)/pk。这个公式可以通过容斥原理来证明‌。2.作用:求小于n的和n互质的数字的个数。

2024-12-15 09:07:36 249

原创 进制的问题

计算数字x在进制p 下的各位数字之和。

2024-11-28 22:48:03 283

原创 快速幂--模板

反复平方,用于求a^k或a^k%p;快速幂:求a^k%p。

2024-11-26 22:20:55 421

原创 素数--计数

质数计数--枚举、埃筛、线筛

2024-11-25 21:53:03 221

原创 最大公约数和最小公倍数

需用头文件:#include

2024-11-24 22:49:53 227

原创 contains

contains:判断某个某个容器(例:set)中是否有某个元素或子串,有则返回true。例题:牛客周赛68C。

2024-11-20 20:26:23 287

原创 数据结构--线性表的顺序存储和链式存储

示例: 二、链式存储--不要求存储空间连续,链表存储 三、数组和链表各操作复杂度对比操作/类别 数组 链表 访问 O(1) O(n) 插入(中间) O(n)(插入位置以后元素要整体后移) O(1) 末尾添加(有足够空间) O(1) O(1)(有尾指针)O(n)(无尾指针,如无需要遍历链表找到尾节点插入)

2024-10-19 16:27:03 285 1

原创 最大子列和

在线处理:每输入一个数据就进行即时处理,在任何一个地方中止输入,都能正确给出当前值。题目:给定N个整数的序列{A1,A2,……An},求函数f(i,j)=max{0,复杂度:T(n)=O(n)。

2024-10-13 12:23:21 198

原创 c++中保留小数(cout)

setprecision

2024-10-10 21:52:08 981

原创 cmp是什么

cmp

2024-10-10 21:19:34 273

原创 图的邻接矩阵存储法和邻接表存储

图一的二维数组中,第i行第j列表示的是点i到点j是否有边。1表示有边,∞表示没有边。0表示(i=j)时自己到自己。图一为二维数组,图二为要存储的图。以两图为例:(《啊哈!

2024-10-10 21:04:27 308

原创 数据结构--栈与队列

本文介绍了栈和队列的数组模拟实现方法,包括栈的先进后出操作和队列的循环队列实现。同时讲解了单调栈和单调队列的特性与应用,如单调栈用于查找数组中元素的邻近较大/较小值,单调队列用于解决滑动窗口的最值问题。最后提及了STL容器(stack、queue、deque)的替代方案。文中提供了基础操作的代码模板和实现思路。

2024-09-26 16:21:29 455

原创 数据结构--链表与双向链表

本文介绍了链表的基本概念和操作。链表由节点组成,每个节点包含数据和指针。由于效率问题,笔试中常用数组模拟链表。重点讲解了单链表和双链表的基本操作:单链表包括初始化、头插法、任意位置插入和删除节点,时间复杂度为O(1);双链表则增加了反向指针,支持双向遍历,操作包括初始化、插入和删除节点。两种链表都通过指针维护节点间关系,其中双链表操作更灵活但占用更多空间。文章提供了详细的代码实现示例。

2024-09-23 14:14:26 489

原创 Sort函数

作用:对两个迭代器(或指针)指定的部分进行快速排序。可以在第三个参数传入定义大小比较的函数,或者重载“小于号”运算符。bool cmp(int a,int b)//重载运算符。return a>b;//a>b则放在前面。2️⃣//从大到小排序。

2024-09-08 16:05:33 222

原创 算法基础---最短路问题

3、稀疏图和稠密图区分:稠密图:n^2~m,稀疏图:n~m。循环后所有边一定满足dist[b]>=dist[a]+w //三角不等式。{ t←不在S中的距离min的点 n^2次。2、多源最短路:多个起点到其它所有点的最短路。注: 1、单源最短路:一个起点到其它所有点的最短路。(看dist[x]>dist[t]+w(权重))(看dist[x]>dist[t]+w(权重))dist[x]:当前1~x最短路间距离。

2024-09-07 15:44:22 1079

原创 算法基础---区间和并

本文介绍了区间合并的基本概念和实现方法。区间合并指将有交集的多个区间合并为一个更大的区间。核心思路是:1)先按区间左端点排序;2)依次比较相邻区间,若前一个区间的右端点不小于后一个区间的左端点,则进行合并。文中提供了区间合并的代码模板,并通过两个例题(AcWing 15961和21343)展示了具体实现,包括如何计算最长合并区间和最长间隔时段。主要使用vector存储区间端点,通过排序和遍历比较实现合并操作。

2024-09-03 19:57:15 569

原创 算法基础---离散化

当一组数据值域太大(例:0~10^9),而数据数量很小(例:10^5)时,值域中的数不是全都用得上的。所以需要用离散化将该组数据。例:a[]={1,3,3,100,50000};,来用数组表示这组数据,有效。

2024-09-03 19:15:33 479

原创 算法基础---位运算

0001k=0001,k=2,k是右移的位数,这里k = 2.(一)n的二进制表示中第k位(自右向左)是几?(二)、lowbit(x):返回x最后一位1及后面所有零。返回:x&-x 或 x&(~x+1)任何数据在计算机中都是以。进行操作,所以效率很高。总:1+2:n>>k&1。存储,位运算是指直接对。例:求二进制中1的个数。

2024-09-03 18:00:39 396

原创 算法基础---双指针

朴素算法在第二层遍历时,会重新开始j恢复到初始位置。但双指针则不会恢复到初始位置,在满足位置的地方继续走下去。以此减少算法的复杂度。输入一个字符每个子串之间有一个空格,让你输出每一个空格后的子串。1.快慢指针指向两段不同的内存,两指针同向移动扫描。2.对撞指针指向同一段内存,两指针反方向移动扫描。输入 abc def hij。例2:最长连续不重复子列。

2024-09-02 20:08:06 362

原创 算法基础---拓扑序列

∵一定存在一个入度为0的点。一、理解:有向无环图(亦称拓扑图)必有拓扑序列。出度:多少条边从该点指出。入度:多少条边指向该点。

2024-09-02 19:36:30 263

原创 算法基础---深搜(DFS)与广搜(BFS)

本文介绍了深度优先搜索(DFS)和广度优先搜索(BFS)两种算法的基础实现与应用。DFS采用栈结构,通过递归实现"一条路走到底"的搜索策略,常用于排列组合等问题(如数字排列、N皇后问题)。BFS使用队列进行"逐层扩展"的搜索,适用于最短路径问题(如走迷宫、八数码问题)。文章还展示了树与图的DFS/BFS应用实例(如树的重心、图中层次),并提供了完整代码实现。两种算法各具特点:DFS空间复杂度O(h),BFS为O(2^h),需根据问题特性选择合适方法。

2024-09-01 17:02:34 891

原创 const的用法

一、基本概念:const被称为常量限定符,定义后表示该变量不可修改。

2024-08-31 10:15:30 496

原创 字符串和数字的转换

【代码】atoi函数。

2024-08-31 09:55:05 332

原创 vector<int>& arr

在这个示例中, func1 中对 arr 的操作是在复制的对象上进行的,而 func2 中则是直接对传入的原始 myVector 进行操作。,从而提高程序的性能。当传递一个非常大的容器(如 vector )时,如果不使用引用而是按值传递,会导致整个容器被复制,这可能会带来较大的性能开销。在 vector<int>& arr 中使用 & 是为了传递引用。传递引用的主要目的是。

2024-08-31 09:30:43 444

原创 算法基础--前缀和和差分

本文介绍了前缀和与差分两种常用算法。前缀和通过预处理数组前n项和,实现O(1)复杂度的区间查询,包括一维和二维实现模板。差分则通过记录相邻元素差值来高效处理区间增减操作,同样提供了一维和二维的实现代码。两种算法都通过预处理将区间操作的时间复杂度优化为常数级,适用于大规模数据查询和修改场景。

2024-08-30 21:28:45 291

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除