![](https://img-blog.csdnimg.cn/05a85386003541f2859892740bda262a.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
基础算法学习笔记及例题
文章平均质量分 53
基本算法介绍及例题习题讲解。
小Q`
这个作者很懒,什么都没留下…
展开
-
0x15 字符串
一.字符串的基本知识1.字符串: 1.1 S:无特殊说明,字符串仅由26个小写字母'a'~'z'构成,并用大写字母表示一个字符串。 1.2 |S|:表示一个字符串的长度。 1.3 S[i]:表示字符串S的第i个位置的字母,下标从1开始。2.子串: 2.1 S[l,r]:表示字符串S从l到r个字母顺次连接而成的新的字符串。 2.2 PrefixS[i]:表示字符串S长度为i的前缀,PrefixS[i]=S[1,i]; 2.3 SuffixS[i]:表示字符串S长度为i的后缀,SuffixS[原创 2022-02-14 08:23:41 · 664 阅读 · 0 评论 -
0x14 hash
一.hash的种类hash分为普通hash和字符串hash。其中普通hash的存储结构(处理冲突)有两种:拉链法和开放寻址法。冲突:两个不同的数通过hash函数映射到相同的值。PS:离散化是一种特殊的hash(离散化需要保序)。二.普通hash(hash函数一般为x%mod直接取余就可)hash函数中,mod(表头数组长度一般取成一个质数,这样可以减少冲突的概率。)拉链法开一个序列做链接表表头。例题:AcWing 840. 模拟散列表code:#include<iost原创 2022-02-11 21:30:31 · 221 阅读 · 0 评论 -
0x02. 基本算法 — 归并排序
算法分析:时间复杂度O(nlogn)O(nlogn)O(nlogn)思想:归并排序是一种基于分治的思想。实现步骤:给定一个待排序数组q[N],其中L为左端点,R为右端点。1.确定分界点:int mid = l + r >> 1;2.递归处理左右区间:merge_sort(q, l,mid) , merge_sort(q,mid + 1,r);3.调整区间:合二为一code:#include<iostream>using namespace std;const原创 2022-02-05 18:39:21 · 776 阅读 · 0 评论 -
0x01. 基本算法 — 快速排序
算法分析:时间复杂度:nlognnlog_nnlogn思想:快速排序是一种基于分治的思想。实现步骤:给定一个待排列的数组q[N],其中L为左端点,R为右端点。1. 确定分界点并定义i,j指针:可选q[l]或者q[r]或者q[mid]或者任意值作为分界点。2. 调整区间:调整区间的目的是为了让分界点的左边的值都小于等于分界点,让分界点右边的值都大于等于分界点。3.递归处理左右两段:分别递归处理左右两个区间即可。code:#include<cstdio>#include<原创 2022-02-04 18:30:15 · 793 阅读 · 0 评论 -
AcWing 95. 费解的开关(题解)
题目链接:费解的开关题目分析:第一步:通过对题目的分析,我们可以发现规律:当前这一层的五栈灯的状态是由上一层的灯的状态确定的。因为如果上一层对应位置的状态是0的话说明当前这个位置必须按一下,不然则上一层这个0无法更新为1。如果上一层对应位置的状态是1的话,那么当前位置则不能按,如果按的话会导致上一层的对应位置的状态变为0之后无法变为1。当步数大于六步的话,直接输出无解。所以我们只需要定义一个变量记录一下操作次数即可。第二步:所以我们先处理第一层的状态。首先第一层一共有多少层状态呢。我们可以发现每个位置原创 2022-01-25 10:15:36 · 157 阅读 · 0 评论 -
2022.1.30 训练日记5 AcWing 90.64位整数乘法
题目链接:64位整数乘法题目分析:题目求a乘b对p取模的值,乍一看很简单,但是事实不是如此。第一步:分析题目数据范围。发现a,b,p都是可以取到10的18次方。所以我们预想一下最坏的情况就是a和b都取10的18次方。那么a·b等于10的36次方超过了超长整型long long 的数值范围。所以解决方法一:用高精度算法。方法二:用龟速乘第二步:鉴于高精度算法代码较长所以我们选择用龟速乘算法。什么交龟速乘呢。龟速乘(快速加)和快速幂原理基本上一样。首先a·b我们可以把b写成几个数相加的结果。比如说37。原创 2022-01-24 22:02:33 · 391 阅读 · 0 评论 -
基础算法之位运算
位运算一.核心思想:程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。二.常见的位运算符C++ 提供了按位与(&)、按位或(| )、按位异或(^)、取反(~)、左移(<<)、右移(>>)这 6 种位运算符。 这些运算符只能用于整型操作数,即只能用于带符号或无符号的 char、short、int 与 long 类型。1.按位与(&)用法:a&b(其中a,b为两个整型类型的数值,如果a和b都为1则整原创 2022-01-15 23:22:44 · 402 阅读 · 0 评论