- 博客(45)
- 收藏
- 关注
原创 基础算法 —— 差分 【复习总结】
差分和上一篇的前缀和算法一样,是经典的用空间换时间的方法,它的核心思想也是。其实,差分的基础上进行前缀和可以得到原数组差分也分为一维差分和二维差分,不过它们的处理步骤相差无几。都分为两步:1. 创建差分数组;2. 处理目标区间 3.还原原始数组。
2025-04-16 14:26:13
1009
原创 基础算法 —— 前缀和 【复习总结】
前缀和是经典的的方法,它的核心思想是,可以在枚举过程中,快速给出查询结果。后文我们会遇到与。它们的处理方法都可以分为两步:1. 创建前缀和数组;2. 查询目标区间。
2025-04-15 22:07:05
704
原创 基础算法 —— 枚举 【复习总结】
枚举,就是把所有的情况一一罗列,找出符合题目要求的解。这是一种纯暴力的解法,而一般情况下,这又是我们最先能想到的办法(但纯粹的暴力枚举一般都会超时),我们所学习的各种算法(二分,前缀,差分等)都是在枚举的方法上进行优化。所以,打好枚举的基础是很有必要的如何使用枚举策略?思考有三大方向:1. 枚举的对象(枚举什么),2. 枚举的顺序(正序还是逆序) , 3. 枚举的方式(普通、二进制、递归)
2025-04-14 09:24:48
463
原创 基础算法 —— 模拟【复习总结】
模拟指直接按照题目的要求写代码,题目要求什么就写什么,注重的是。回想一下,在我们学习语法是做的题,一般都是模拟题。
2025-03-31 13:00:11
690
原创 基础算法 —— 高精度 【复习总结】
如果数据的值很大,无论是long还是long long,或者其他各种类型都存不下时,可以使用高精度算法计算加减乘除。具体思想为:1. 先用字符串读入这个数,然后用数组逆序存储该数每一位(低位在数组的低下标)2. 使用数组进行计算,本质是模拟竖式计算。
2025-03-31 12:35:50
771
原创 c++ 类和对象 —— 中 【复习笔记】
构造函数虽然叫构造,但它的作用不是开空间创建对象而是初始化对象它具有以下特性:1. 函数名和类名相同2. 无返回值3. 构造函数可以重载4. 对象实例化时编译器自动调用5. 如果类没有显式定义构造函数,那编译器会自动生成一个无参的默认构造函数;如果类显式定义了,那编译器不再生成内置类型成员在类中声明时可以给默认值。
2025-03-17 23:18:18
655
原创 c++ 类和对象 —— 上 【复习总结】
在c语言中,结构体内只能定义变量,而在c++使用struct会发现,结构体不仅可以定义变量,还可以定义函数。只是c++中更喜欢用class(类)来代替结构体//类体:成员变量和成员函数//注意分号//class为定义类的关键字,class_name为类的名字//类体中内容称为类的成员变量称为类的属性或成员变量;函数称为类的方法或成员函数2.2 类的定义方式class Datepublic:int _year;int _month;int _day;
2025-03-16 15:57:56
887
原创 c++基础入门 【复习总结】
命名空间定义一个新的作用域,将所有内容限制在这个作用域//定义//使用 namesapce关键字,后面跟命名空间的名字,再跟{},不加分号//可以定义变量、函数和自定义类型int b = 1;int data;//可以嵌套使用int c = 3;//如果同一个工程有多个相同名称的命名空间,会合成为一个使用方式://加命名空间名称和作用限定符int main()return 0;//用using将命名空间的成员引用int main()
2025-03-07 14:24:24
865
原创 常见的排序算法 【复习笔记】
1. 后面的排序算法实现,对于逆序,只有知道原理,实现很容易2. 案例题:题目描述:将读入的 N 个数从小到大输出 ( 1 <= N <=10e5)输入描述:第一行一个正整数 N第二行 N 个空格隔开的正整数 ai输出描述:给定的 N 个数从小到大输出,空格隔开,行末换行无空格输入:54 2 4 5 1输出:1 2 4 4 5。
2025-03-03 12:03:57
1108
原创 哈希表和STL —— unorderde_set/unordered_map【复习笔记】
哈希表可能把两个或两个以上的不同关键字映射到同一个地址,这种情况就叫哈希冲突,也加散列冲突,起冲突的不同关键字,称为同义词将关键字映射成对应地址的函数就是哈希函数,也叫散列函数,记为 Hash(key)= Addr。
2025-03-02 10:30:22
1090
原创 set 和 map 的左右护卫 【刷题反思】
题目描述:我们定义,一天营业额的最小波动 = min { | 该天以前某一天的营业额 - 该天营业额 | }特别的,第一天的营业额最小波动为第一天的营业额输入描述:第一行 n (n <= 32767),表示公司从成立到现在的天数接下来 n 行每行有一个整数 ai (|ai| <= 10e6),表示第 i 天的营业额,可能存在负数输出描述:一个正整数,表示每一天最小波动的和,保证结果小于 2^31输入:6512546输出:12。
2025-03-01 21:42:34
366
原创 红黑树和 STL —— set和map 【复习笔记】
相比较前文的堆,二叉搜索树并不需要必须是一棵完全二叉树二叉搜索树(二叉排序树或二叉查找树,简称BST)是具有以下特性的二叉树:1. 若它的左子树非空,则左子树上所有结点的值均小于它的根结点的值。2. 若它的右子树非空,则右子树上所有结点的值均大于它的根结点的值。3. 它的左、右子树也分别为二叉搜索树。即左子树结点的值 < 根结点的值 < 右子树结点值(在二叉搜索树中,一般不存在值相同的两个结点)所以,对二叉搜索树中序遍历,可以得到一个递增的有序序列。
2025-03-01 14:08:06
1134
原创 堆的应用(topk问题、单调性问题)【刷题反思】
题目描述:有一个长度为 n 的数组,值为 a[ i ],要找到数组中第 k 小的数。现增加以操作:1 x:1 代表给数组加一个元素 x2 :2 代表查询第 k 小的元素,如果没有 k 个数就输出 -1输入描述:第一行三个整数,n,m,k(1 <= n,m,k <= 2e5)第二行 n 个整数 a[ i ] (0 <= a[i] <= 1e9)接下来 m 行,每行代表一个操作输出描述:每次查询输出一个第 k 小的数输入:5 4 31 2 3 4 521 11 32。
2025-02-28 19:00:42
1008
原创 树问题(树高、层宽、路径)【刷题反思】
题目描述:宽度表示二叉树上同一层最多的结点树,结点v,u间的距离表示从 u 到 v 的最短有向路径上向根节点的边数的两倍加上向叶节点的边数给一棵二叉树,求出它的宽度、深度和两个指定节点 x 、y间的距离。输入描述: 第一行为一个树的结点树 n接下来 n - 1 行,每行表示两个整数 u,v,表示树上存在一条链接u,v的边(保证u是v的父节点)最后一行有两个整数 x,y,表示求 x,y间的距离输出描述:输出三行,分别表示二叉树的深度、宽度和 x,y 间的距离输入:101 21 3。
2025-02-28 11:56:36
268
原创 堆和STL —— priority_queue 【复习笔记】
堆是一棵特殊的,可以实现优先级队列(priority queue),堆中每个结点,如果存在子树,那结点的权值要大于等于(小于等于)子树的所有结点的权值堆可以分为:结点权值大于等于子树所有结点的权值结点权值小于等于子树所有结点的权值。
2025-02-28 10:24:05
427
原创 二叉树的先序、中序和后序 【刷题反思】
题目描述:给一棵二叉树的中序和后序排列,求它的先序排列。输入描述:共两行,均为大写字母组成的字符串,分别表示一棵二叉树的中序和后序输入:BADCBDCA输出:ABCD中序排列: B D A E C F后续排列:D B E F C A1. 根据后续遍历,最后一个元素为这个树的根2. 根据中序遍历,根节点会把整个序列分成两部分,左边为左子树,右边为右子树3. 在左子树和右子树中,又可以进行递归(处理方法和刚开始一样)
2025-02-27 23:30:29
222
原创 二叉树的概念和静态实现 【复习笔记】
⼆叉树是⼀种特殊的树型结构,它的特点是每个结点最多只有 2 棵子树(可能没有,也可能只有一个),节点间有明确的父子关系,二叉树结点的孩子被称为左孩子和右孩子),不能颠倒。
2025-02-27 17:51:58
391
原创 用数组实现树的存储遍历【复习笔记】
树是由 n(n≥0)个有限节点组成的一个具有层次关系的集合。当 n=0 时,称为。在一棵非空树中,有且仅有一个特定的节点称为;其余节点可分为 m 个互不相交的有限集 T1、T2、…、Tm,其中每个集合本身又是一棵树,并且称为根结点的子树因此,树是定义的:一个节点拥有的子树个数称为该节点的度。度为 0 的节点称为叶子节点或终端节点;度不为 0 的节点称为分支节点。:树中节点的最大度数称为树的度。:树中两个结点之间的路径是由这两个结点之间所经过的结点序列构成的,路径长度为序列中 边的个数。
2025-02-26 21:24:18
546
原创 范围移动,数据进出 【刷题反思】
题目描述:假设内存中有M个单元,每单元能存放⼀个单词和译义。每次翻译一个新单词,会先在内存查找,再去字典查找。对于内存没有的单词,会放入内存如果当前内存中已存入的单词数不超过 M ,软件会将新单词存入一个未使用的内存单元;若内存中已存入M个单词,软件会清空最早进⼊内存的那个单词,腾出单元来,存放新单词。假设⼀篇英长度为N(<1000)个单词。翻译软件需要查找多少次词典?假设在翻译开始前,内存中没有任何单词输入描述:共两行第一行为两个正整数 M,N,代表内存容量和文章长度。
2025-02-25 18:29:07
322
原创 队列和STL —— queue 【复习笔记】
队列是一种线性数据结构,它遵循(First In First Out,FIFO)的原则,队列只允许在一端进行插入操作,而在另一端进行删除操作。允许插入的一端称为,允许删除的一端称为:也叫插入操作,是将新元素添加到队尾的操作:也叫删除操作,是将队头元素移除的操作。
2025-02-25 08:32:24
238
原创 括号配对问题 【刷题反思】
题目描述:给定一个只包括 '(' , ')' , '{' ,'}' , '[' , ']' 的字符串 s ,判断字符串是否有效有效字符串:1. 左括号必须用相同类型的右括号闭合2. 左括号必须以正确的顺序闭合3. 每个右括号都有⼀个对应的相同类型的左括号示例:输入:s = "()[]{}"输出:true。
2025-02-24 18:07:51
418
原创 栈和STL —— stack 【复习笔记】
栈是一种特殊的线性表,它只允许在表的一端进行插入和删除操作。这使栈具有 “后进先出”(Last In First Out,LIFO)的特性:栈中允许进行插入和删除操作的一端:栈的另一端,是最先放入元素的位置,在栈的操作过程中,栈底通常是固定的。:也叫压栈、进栈,是将元素添加到栈顶的操作。:也叫弹栈,是从栈顶弹出一个元素。:当栈中没有任何元素时,称栈为空栈。
2025-02-24 10:11:14
203
原创 数组分块问题 【刷题反思】
题目描述:给一个数组 nums ,写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序请注意,必须在不复制数组的情况下原地对数组进行操作示例: 输入: nums = [0,1,0,3,12] 输出: nums = [1,3,12,0,0]1.2 思想无非是将数组分为三部分,第一部分为非0元素,第二部分为全0元素,第三部分为待扫描元素我们可以定义一个下标 cur 来作为分界线,定义 i 来遍历数组,[ 0,cu
2025-02-23 17:13:02
293
原创 链表和STL —— list 【复习笔记】
和顺序表一样,链表也是一种线性表,线性表存储结构为就是链表链式存储不仅要保存数据元素,还要保存数据元素间的关系,这两个部分信息形成了。结点有两个域:数据域(存储数据元素)和指针域(存储逻辑关系)链表又以共有8种类型。
2025-02-23 11:01:54
331
原创 顺序表和STL——vector【 复习笔记】
要理解顺序表,首先得理解线性表线性表是具有相同数据类型的 n (n>=0)个数据元素的有限序列,n=0时,称为空表,线性表逻辑结构是线性结构而线性表使用顺序存储就是顺序表,顺序表通过数组实现。
2025-02-22 13:58:59
416
原创 c++基础知识易忘易混 —— 7_结构体和类 【复习笔记】
这个比较函数,接受两个参数,返回一个布尔值,如果第一个参数应该排在第二个参数前,则返回true,否则返回false。3.不能重载,一个结构体(类) 只能有一个析构函数。4.如果没显式定义构造函数,系统自动默认生成。1.析构函数名是在结构体(类)前加上字符 ~1.函数名和结构体(类)名相同。结构体中重载()运算符-仿函数。3.构造函数可以重载。2.无参数无返回类型。
2025-02-20 21:44:24
141
原创 c++基础知识易忘易混 —— 6_函数、位运算和运算符 【复习笔记】
引用特性:1.引用在定义时必须初始化 2.一个变量可以有多个引用 3.同一个引用不能给多个变量传引用调用不会拷贝实参,效率更高。
2025-02-20 19:06:12
943
原创 cin/cout性能优化 【复习笔记】
1. c++是从c语言发展而来,所以c++的输入输出流系统要和c语言的输入输出流系统兼容,为实现这种兼容,c++会默认将cin,cout等流对象和c语言的stdin,stdout等流对象同步,这意味每次使用cin、cout都将自动刷新c语言标准库缓冲区2. 默认情况下,cin和cout有一种绑定关系:当使用cin读取数据时,任何之前通过cout输出的内容都将强制刷新到屏幕上,这导致频繁读取大量数据的情况下,每次使用cin都会有一次输出缓冲区的刷新,浪费时间。
2025-02-19 23:01:04
312
原创 c++基础知识易忘易混 —— 5_string 【复习笔记】
string 中 begin() 和 end() 返回的迭代器类型是 string::iterator。支持 string 和 string 的各种关系运算,支持 string 和。stod/stof:和stoi/stol比较,只是少了数字进制的参数。end():返回字符串最后一个字符的下一个位置的迭代器。getline 以 '\n' 为字符串结束标志。string 类型的字符串支持 + 运算。将数字转换为字符串,包括整型、浮点型。
2025-02-18 22:07:25
185
原创 c++基础知识易忘易混 ——4_数组 【 复习笔记】
fgets 最多读取 num-1 个字符,最后一个位置给 '\0' ,如果 num 的长度远大于输入的字符串长度,就会读到 ‘\n' ( '\n' 也读取)为止,同时读取到的内容加上 '\0'字符串末尾隐藏一个 '\0' 字符,'\0' 是字符串的结束标志。用 +0.5 后强制类型转换成 int 类型的值处理。cin 也会将读取到的字符串末尾加上 '\0'头文件:<cstring>头文件:<cstring>memset 给每个。设置 value 值。
2025-02-18 21:18:31
311
原创 c++基础知识易忘易混 —— 3_分支循环 【复习笔记】
3. switch 语句中,case 决定分支的入口,而 break 才决定分支出口,没遇到 break 就会一直向下执行。浮点数在内存中无法精确保存,这导致浮点数的比较中可能有精度误差,所以不建议直接使用 == 来比较两个浮点数。逻辑运算符的一个特点:如果左边表达式就能确定整个表达式的结果,就不再对右边的表达式求值。pow(x,y) 返回 x 的 y 次方的值,头文件<cmath>fabs 用来求一个浮点数的绝对值,头文件<cmath>floor 对一个浮点数向下取整,头文件<cmath>
2025-02-18 20:03:58
175
原创 c++基础知识易忘易混 —— 2_输入输出 【复习笔记】
它们的头文件<cstdio>getchar() 使用不带任何参数,返回用户键盘输入的一个字符(包括空白字符),读取失败,返回常量 EOF(-1),所以返回类型为 intputchar() 将参数字符输出到屏幕,返回输出的字符,失败返回 EOF。
2025-02-18 15:15:20
255
原创 c++基础知识易忘易混 —— 1_入门 【复习笔记】
char的类型是 signed char 还是 unsigned char,由编译器决定,大部分的char 是 signed char,这和 int 不同,int 就是 signed int。sizeof 的返回类型是 size_t,值无符号整数(包含可能的 unsigned int,unsigned long,unsignde long long 等类型,具体取决于编译器)3. 负数也支持取模,但结果的正负号由第一个操作数的正负决定。3.较大类型转换为较小类型,发生截断,按较小类型的长度,保留。
2025-02-18 14:20:01
328
原创 c++结构体和类 【复习笔记】
c++为了面向对象,喜欢用class(类)替换structural(结构体),但二者有些许差别和结构体一样,类(class)也有成员变量和class tagpublic:成员变量列表;成员函数列表;//public 是类成员权限访问限定符,标志类成员可以公开访问和调用结构体成员变量和成员函数默认公开,类成员变量和成员函数默认私有(private)class Stupublic:Stu()chinese=90;return 0;
2025-02-15 23:58:22
342
原创 递归简介及斐波那契数问题 【复习笔记】
递归指函数在定义时直接或间接调用自己的方式递归的递指递推,归指回归,递归本质是将大型复杂问题转换为一个个相似但较小的问题递归的必要条件:递归有限制条件,每次递归调用后会越来越接近这个条件,当满足条件,递归结束。
2025-02-09 23:08:25
345
原创 c语言函数简介 【复习笔记】
type fun_name(形式参数)//函数体//type:函数返回类型//fun_name:函数名函数即子程序:type 表示经过这道程序的到的结果,如果不需要结果,返回类型用 void ,表示不返回;fun_name 就是这道程序的名字,方便调用形式参数 就是要放入这个程序的东西,同理,如果不想放东西,参数可以是 void ,如果参数存在,要交代参数的类型和名字,以及参数个数函数体 就是这个程序的具体样子return x+y;//这就是一个加法函数。
2025-02-07 23:28:45
693
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人