![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PAT
文章平均质量分 74
梦想总比行动多
程序媛的日常琐碎杂记
展开
-
《算法笔记》编程笔记——第五章:简单数学题
《算法笔记》编程笔记——第五章:简单数学题一、最大公约数与最小公倍数//最大公约数的递归计算公式int gcd(int a, int b){ if(b == 0)return a; //0和任意一个整数a的最大公约数都是a,注意不是0 else return gcd(b, a % b);}二、分数的计算分数的化简:①结果为负,分子分母变为相反数(最简需要分母为正);②结果为0,使分子为0,分母为1;③其他情况下,计算出分子分母最大公约数,分别除以最大公约数,表示约分。原创 2021-03-03 21:56:07 · 130 阅读 · 0 评论 -
《算法笔记》编程笔记——第四章:散列、贪心、二分、two pointers和其他技巧
《算法笔记》编程笔记——第四章:散列、贪心、二分、two pointers和其他技巧一、散列bool hashTable[1000] = {false};//如果要计算出现的次数,可以将bool变为intint hashTable[1000] = {false};hashTable[x]++;//采取把输入的数作为数组下标来处理key为整数,可以用线性探查法、平方探查法等线性探查法:不断将hash值加1平方探查法:H(key) + k^2(k = 1, 2, 3, 4……), H原创 2021-03-03 21:55:16 · 104 阅读 · 0 评论 -
《算法笔记》编程笔记——第十章 图算法专题
《算法笔记》编程笔记——第十章 图算法专题图的存储邻接矩阵只适用于顶点数目不太大的时候,一般不超过1000.邻接表(vector容器)顶点数目较大时,一般情况下都是需要用邻接表而不是邻接矩阵来存储图先补充一个关于结构体内构造函数的小知识//示例代码struct studentInfo{ int id; char gender; //构造函数 //格式为“函数名(变量):赋值{}” studentInfo(int _id, c原创 2021-03-03 21:54:44 · 127 阅读 · 0 评论 -
《算法笔记》编程笔记——第十一章 动态规划
《算法笔记》编程笔记——第十一章 动态规划动态规划DP,是用来解决一类最优化问题的算法思想。动态规划会将每个求解过的子问题的解记录下来,这样当下一次遇到同样的子问题时,就可以直接使用之前记录的结果,而不是重复计算。动态规划一般可以用递推或者递归的方式来写。递归写法又叫做记忆型搜索。一个问题必须拥有重叠子问题和最优子结构,才能使用动态规划去解决。使用递推写法的计算方式是自底向上,即从边界开始,不断向上解决问题,知道解决了目标问题;而使用递归写法的计算方式是自顶向下,即从目标问题开始,将他分解原创 2021-03-03 21:53:00 · 200 阅读 · 0 评论 -
《算法笔记》编程笔记——第十三章 专题扩展
# 《算法笔记》编程笔记——第十三章 专题扩展分块思想问题描述:给出一个非负整数序列A,元素个数为N(N<=10^5, A[i]<=10^5),在有可能随时添加或者删除元素的情况下,实时查询元素第K大,即把序列元素从小到大排序后从左到右的第K个元素。【在线查询,当暴力法排序做时容易超时】思想:将有序元素划分为若干块。对一个有N个元素的有序数列来说,除最后一块,其余每块中元素的个数都应当为int(sqrt(n))【即根号n往下取整个】,总共的块数应该为根号n往上取整。查找思原创 2021-03-03 21:47:35 · 193 阅读 · 0 评论 -
《算法笔记》编程笔记——第十二章 字符串专题
《算法笔记》编程笔记——第十二章 字符串专题KMP算法给出两个字符串,判断其中一个字符串是否是另一个字符串的子串。如果用暴力求解,时间复杂度将达到O(n*m),如果用KMP算法,时间复杂度仅为O(n + m)。next数组int型数组,其中next[i]表示使子串s[0……i]的前缀s[0……k]等于后缀s[i-k……i]的最大的k。(注意前缀跟后缀可以有部分重叠,但是不能是s[0……i]本身);如果找不到相等的前后缀,就令next[i] = -1. 显然,next[i]就是所求最原创 2021-03-03 21:43:41 · 106 阅读 · 0 评论 -
《算法笔记》编程笔记——第七章与第六章部分 栈、队列、链表
《算法笔记》编程笔记——第七章与第六章部分 栈和递归、队列、链表一、栈栈的使用:#include + using namespace std;栈的定义:stack st;栈内元素的访问:st.top()。只有这个方法进行元素的访问常用函数:st.push(x);//压入数值st.pop();//弹出栈顶元素st.top();//获取栈顶元素st.empty();//栈判空,如果为空,返回true,否则返回falsest.size();//返回栈内元素个数//上述操作原创 2021-03-03 21:40:54 · 181 阅读 · 0 评论 -
《算法笔记》编程笔记——第六章 c++标准模板库(STL)
《算法笔记》编程笔记——c++标准模板库(STL)写在开头的总结性话:除去vector、String、map可以用取下标的形式来访问元素之外,其余(例如set、queue、stack)都不可以。一、vector的用法vector为变长数组,使用时,需要加头文件“ #include”,并且加上"using namespace std".vector定义:vector name (其中name是一个可变数组); vector name[100] (这里name是一个二维数组,原创 2021-03-03 21:40:15 · 149 阅读 · 0 评论 -
《算法笔记》编程笔记——第九章 数据结构专题
第九章 数据结构专题树与二叉树概念子树的棵树称为结点的度。完全二叉树判断是否是完全二叉树可以用结点下标的关系代码模板//层序遍历中,如果一个结点没有左孩子,那么这个结点编号 * 2 > n,如果不满足这个条件,就说明不是完全二叉树;右孩子的情况同理。bool isCom = true;void LayerOrder(int root){ queue<node> q; q.push(tree[root]); while(!q.empty()){原创 2021-03-03 21:39:50 · 108 阅读 · 0 评论 -
《算法笔记》编程笔记——第八章 搜索专题
《算法笔记》编程笔记——第八章 搜索专题递归解题模板求解最大值、最小值。返回的值设置为全局变量,条件值设置为全局变量。如果是函数表达式,则返回函数表达式。总的结构:第一步——递归边界;第二步——递归过程主函数中传入递归函数初始值一类dfs常见问题给定一个序列,枚举这个序列所有的子序列(可以不连续)。可以变形为,枚举从N个整数中选择K个数满足某种条件,并可能需要输出最优方案。模板//例题2:选择K符合条件的数,并输出 #include<cstdio>#in原创 2021-03-03 21:39:09 · 114 阅读 · 0 评论 -
复杂输入输出
复杂输入输出规律复杂输入与输出,用cin和cout可能会超时,最好使用scanf。A 1095:排序 + 输入所有数据+从所有数据中挑选有效数据;一辆车的in与out匹配,计算停车时间。(记录匹配问题)思路:①定义结构体变量all来存储所有记录,valid来存储有效记录,这是打破从输入开始处理的常规思路。②对所有all数组记录,先按车牌号从小到大排序,然后再按时间从小到大排序。排序之后就可以方便地进行匹配。即寻找同一辆车(车牌号相同)中相邻时间并且一个为in另一个为out的记录。原创 2021-03-03 21:31:42 · 439 阅读 · 0 评论 -
PAT字符串专题复习
PAT字符串专题复习最长连续公共子串求解用最长不连续公共子序列的变形来做思路:①令dp[i] [j]表示字符串a中结尾为i和字符串b中结尾为j的前一段字符子串中连续公共子串的长度。例如afbc和abcde中,dp[4] [3] = 2, dp[4] [4] = 0.②状态转移方程:int maxlen = 0; //记录最长连续子串长度,注意不能最后直接输出dp[i][j].if(a[i] == b[j]){ dp[i][j] = dp[i-1][j-1] + 1;原创 2021-03-03 21:31:04 · 164 阅读 · 0 评论 -
PAT题目题型总结
PAT题目题型总结A1058-1155题型总结题目知识点A1155(30)堆的判断;二叉树遍历化简为dfs+vector与数组下标操作;很难A1154(25)vector+set解决图的边顶点颜色判断,不用建立图!;较难A1153(25)输入处理(排序、分情况、使用STL工具),输出处理;较难A1152(20)判断素数;简单A1151(30)中序+先序确定树的核心思想(实质是对树结点进行排序)+最近祖先;很难A1150(25)图旅行商环路原创 2021-03-03 21:30:34 · 544 阅读 · 0 评论 -
PAT第五章专题复习
PAT第五章专题复习数学题A 1049 :统计从1-N中1的个数思路:①逐位进行考虑。从低位开始,如果当前位now = 0的话,就只需要考虑左边部分的个数。表达式为ans += left * a;②如果now = 1的话,左边部分计算同理;now位有1个,再加上右边部分的数值。可以得到表达式为ans += left * a + 1 + right③如果now >= 2的话,没有任何限制,可以得到表达式ans += (left + 1) * a;代码实现#include&原创 2021-03-03 21:30:01 · 74 阅读 · 0 评论 -
PAT第四章专题复习
PAT第四章专题复习二分法A 1010:给出两个很大数(用字符串来读取)并给出其中一个数的进制,要求另一个数为多少进制时满足两个数相同。如果存在这样的进制,输出进制值;如果不存在,输出“Impossible”.思路:①首先讲一下这道题当中的坑点,十分的多。第一个,所有的数据应该用long long型来存储,不然肯定溢出; 第二个,即使使用了long long型, 在运算过程中,也有可能溢出,即会发生正数变成负数的情况,这一情况在二分法的while循环if条件判断中需要特别注意。 第三原创 2021-03-03 21:29:27 · 97 阅读 · 0 评论 -
PAT第十章专题复习
PAT第十章专题复习图的定义哈密顿图(PAT A 1122)第一步:首尾结点相同?、输入个数是否合法?第二步:除首尾结点外,每个顶点是否有且仅出现一次?第三步:结点之间的边是否存在?欧拉图(PAT A 1126)首先统计结点度数,然后dfs判断是否是连通图。如果是连通图且结点度数都是偶数,则为欧拉图;如果是连通图且仅有两个奇数度数的结点,则为半欧拉图;如果不是连通图或者结点度数不是以上两种情况,则不是欧拉图。旅行商环路(PAT A 1150)相邻结点是否可达?首尾结点原创 2021-03-03 21:28:53 · 108 阅读 · 0 评论 -
PAT第十一章专题复习
PAT第十一章专题复习本专题还需要多重复几遍,很不熟悉!!最长公共子序列变形:允许元素重复A 1045 Favorite Color Stripe (30 分)思路:①本题一开始想到的是用最长不下降子序列做。②也可以用最长公共子序列来做,不过状态转移方程是经过变形的。//不允许元素重复的状态转移方程if(a[i] == b[j]){ dp[i][j] = dp[i-1][j-1] + 1;}else{ dp[i][j] = max(dp[i-1][j]原创 2021-03-03 21:28:10 · 64 阅读 · 0 评论 -
PAT第七章专题复习
PAT第七章专题复习链表链表题目总结:链表题目尤其要注意去掉题目中所给的无效结点,将得到的有效结点链表ans再进行相关操作。另外要注意,题目是否可能1个有效结点都没有。链表经典操作struct node{ int add, data, next;}vector<node> linklist(10005), ans;//linklist用来放输入的链表;ans是去掉无效结点后得到的顺序链表int main(){ int st, n; cin原创 2021-03-03 21:27:46 · 53 阅读 · 0 评论 -
PAT第九章专题复习
PAT第九章专题复习二叉树遍历与树的遍历二叉树中序+层序/先序/后序建立树,输出中序/先序/后序/ 层序序列。(背模板即可)层序+中序确定树模板还需要反复加强理解不建树做法:当结点数比较大并且比较容易操作时给出中序序列和先序序列,再给出两个点,求这两个点的最近公共祖先【PAT A 1151】思路:①不用建树,则需要中序序列的inl和inr下标以及先序序列的根节点下标preRoot。②求最近公共祖先,函数参数还需要传入的两个数的值。③在递归函数中,第一步是递归边界;第原创 2021-03-03 21:26:08 · 64 阅读 · 0 评论 -
PAT第八章专题复习
PAT第八章专题复习本章的算法笔记上的题目已做,蓝桥杯题目大致看了一下。dfs题题目描述【PAT A 1103】,分解因子思路:①用dfs做思路是清晰的,不过自己在写dfs时超时了。在选择最优解时,时间复杂度不是O(1),导致超时。②如果使用原先的递归式,将不能够保证存储到temp中的数是从大到小排序的,如果需要从大到小排序,就必须事先将数存储起来,然后dfs的时候直接调用,类似dfs时调用的是数组下标,而不是数组值本身。③看了题解,发现可以事先将因子存储起来,然后dfs求最优原创 2021-03-03 21:24:42 · 57 阅读 · 0 评论 -
PAT复习专题题目
PAT复习专题题目图A1003(25)最短路径Dijkstra算法+最短路径条数+点权最大;简单A1013(25)图的DFS遍历求无向图连通分量,简单A1018(30)图最短路径+Dijkstra+DFS;较难A1021(25)图的dfs两遍遍历确定树的最高高度的根节点;数学证明知识;较难A1030(30)最短路径Dijkstra算法+最少花费+输出最短路径;简单A1034(30)图dfs遍历计算连通分量;复杂处理;较难A1072(30)原创 2021-03-03 21:12:45 · 146 阅读 · 0 评论