
Cpp-算法理论的学习(C++)
主要是一些做过的题目,使用Cpp实现
TIM33470348
著有《Python数据分析:从小白到专家》一书。于2021年5月,由电子工业出版社和工信出版集团出版,是一本正式发行的图书,ISBN-13:9787121409233。
这本书能够面市,得感谢这么多年来,在我前进道路上一直陪伴我的亲人和好友,以及赏识我的各位长辈,老师和大佬们。尤其是在我低落的时候,仍然陪伴我,鼓励我,没有放弃我的挚友。
展开
-
哈尔滨工程大学研究生入学考试专业课819简答题总结
写在前面 我是2021年考研一战考生,纵观这几年哈工程的出题风格,出简答题还是第一回。较前几年相比,操作系统去掉了判断题,数据结构去掉了判断和填空增加了简答题,现在我根据考研白皮书群的群主小摩托提供的简答题进行总结。PPT上的习题 简述下列术语:数据、数据元素、数据对象、数据结构、存储结构、数据类型、和抽象数据类型。 数据:数据是信息的载体。数据元素:数据元素是数据的基本单位。数据对象:数据对象是具有相同性质的数据元素的集合。数据结构:数据结构是数据元素之间的逻辑关...原创 2020-12-22 20:36:34 · 1628 阅读 · 2 评论 -
蓝桥杯准备——计蒜客·求最大子阵
这是这道题目:给定一个n \times mn×m的矩阵AA,求AA中的一个非空子矩阵,使这个子矩阵中的元素和最大。其中,AA的子矩阵指在AA中行和列均连续的一部分。输入格式输入的第一行包含两个整数n,m(1 \leq n,m \leq 50)n,m(1≤n,m≤50),分别表示矩阵AA的行数和列数。接下来nn行,每行mm个整数,表示矩阵A_{i,j}(-1000 \leq A_{i,j} \leq 1000)Ai,j(−1000≤Ai,j≤1000)。...原创 2020-08-17 13:23:07 · 736 阅读 · 0 评论 -
面试准备——各类排序算法
经过了两趟面试,我意识到自己对以前学习过算法,尤其是排序算法已经遗忘不少了,是时候再复习一下。首先,什么是排序?将记录序列排列成按关键字有序的序列的操作,称为排序(Sort)。其中排序依据的关系是任意的,通常使用小于(递增)、大于(递减)Definitely关系。————张琨 张宏 朱保平《数据结构与算法分析(C++语言版)》...原创 2020-04-11 10:54:57 · 693 阅读 · 0 评论 -
蓝桥杯真题——拉马车(模拟、队列)
题目如下:问题描述小的时候,你玩过纸牌游戏吗?有一种叫做“拉马车”的游戏,规则很简单,却很吸引小朋友。其规则简述如下:假设参加游戏的小朋友是A和B,游戏开始的时候,他们得到的随机的纸牌序列如下:A方:[K, 8, X, K, A, 2, A, 9, 5, A]B方:[2, 7, K, 5, J, 5, Q, 6, K, 4]其中的X表示“10”,我们忽略了纸牌的花色。...原创 2020-03-26 21:10:36 · 1052 阅读 · 0 评论 -
蓝桥杯复习——广度优先搜索总结
前些日子在刷DFS(深度优先搜索)的题目,而最近在练习BFS(广度优先搜索),现在我对我这一段时间的学习做个总结。BFS类似于树的层次遍历,而DFS则是类似树的先根遍历。我拍了《算法C实现》这本书的讲解,作为BFS的示意图,看的顺序是从上到下,从左到右,如下所示:BFS会使用到队列这个数据结构,队列是一个先进先出的数据结构。队列是作为一个缓冲区而存在的。先将当前遍历的节点弹出队列,再将所有...原创 2020-03-18 10:23:41 · 523 阅读 · 0 评论 -
牛客网——小乔和小灰灰(栈)
这是第59次牛客练习赛的第一题,我也是太菜了,难度标记为困难就只能通过这一题,难度中等的比赛还说的过去。这是题目:我的想法使用栈,先将键入的字符串逐个推入栈中,然后逐个出栈,满足有XiaoHuiHui或者XiaoQiao的顺序的话就把标记设置为true,当两个标记都为true时说明是Happy反之输出emmAC代码如下:#include<iostream>#incl...原创 2020-03-14 09:50:26 · 341 阅读 · 0 评论 -
牛客网————客官这边请(高精度问题,可以AC)
最近再练习高精度问题,这个题目是这样的:这是一道典型的大数问题,可以看到我们要求两个大数相加的结果,大数相加原理可以看这里:https://blog.youkuaiyun.com/qq_41938259/article/details/104638833只要稍加修改,主要是格式正确即可,代码如下:#include<iostream>#include<stack>#...原创 2020-03-07 09:40:49 · 313 阅读 · 0 评论 -
大整数相乘算法与2018年蓝桥杯B组第三题“乘积尾零”
大数相乘是为了避免整数超过long long int而上溢出,可以用竖式来模拟,具体算法如下:stack<int> multi(stack<int> a, int b){ stack<int> c; int carry = 0; //反转a得到aa stack<int> aa; while (!a.e...原创 2020-03-05 21:52:11 · 343 阅读 · 0 评论 -
算法笔记__大整数加法和减法(STL实现、stack)以及(String实现)
当C++的long long int类型也无法存放下一个数字的长度了的话,就得使用大数算法。大数算法的原理就是小学学的竖式,例如加法超过十了就要进位,减法减不了了就得向高位借位,原理很简单,代码如下,使用stl实现的,先减法再加法:#include<iostream>#include<stack>#include<sstream>#include...原创 2020-03-03 18:57:21 · 546 阅读 · 0 评论 -
牛客网——A逃脱(可以AC了)
我使用了递归的dfs没有通过,“我的提交里”看到测试用例只有一个,结果是输出超时,估计是递归法使得复杂度陡增,这是题目:虽然0分,我还是保存一下代码供以后参考:#include<iostream>#include<algorithm>#include<cmath>#include<cstring>using namespac...原创 2020-02-22 16:03:01 · 465 阅读 · 0 评论 -
牛客网——贝伦卡斯泰露(栈、队列)(90%通过)
这道题标注是DFS,我正好在练习DFS,就点进去了。但我太菜了,没有看出一点它与DFS的关系,用了队列和栈来做的,题目如下:我的思路是使用一个栈a来存放输入数据,只有顺序一样才可以满足条件,所以使用队列b来判断是否满足“贝伦卡斯泰露“:当队列b的队头和栈a出队的元素一样时,说明重复序列出现,队列b队头元素出队,反之队伍入队。当最后b为空队时说明满足条件输出“Frederica Bernka...原创 2020-02-18 13:36:13 · 338 阅读 · 0 评论 -
牛客网——锦标赛(80%通过)(DFS)
没能AC但是通过了80%,使用的是递归的DFS,八成还是因为使用了递归使得复杂度太高,我也只是复习dfs递归的写法,目的也达到了就不改代码一定要它AC了。具体题目如下:我的想法是将选手成绩存放到名为a的vector中,将1到n个升序排序(0是第一个序号,第一个是主人公的分数不用排序),然后两两比较,低分就erase掉,注意之一端是i++而不是i+=2: for (int i = 0;...原创 2020-02-17 13:57:43 · 548 阅读 · 0 评论 -
牛客网——地、颜色、魔法(DFS)
只有75%通过,估计是因为递归调用次数过多导致堆栈溢出。题目如下:这是我的代码,想法是从边缘开始涂色为+号,计算+号个数,结果用总个数减去加号个数作为输出:#include<iostream>#include<algorithm>#include<cstring>using namespace std;bool flag[10000][1...原创 2020-02-15 14:30:46 · 295 阅读 · 0 评论 -
蓝桥杯练习——大臣的旅费
题目如下:说是说求路费,但是实际上还是求最短路径值,可以使用BFS,这是一个递归算法:#include<iostream>#include<string.h>#define MAXSIZE 1003using namespace std;int map[MAXSIZE][MAXSIZE] ;//定义邻阶矩阵int km, n, sum, maxsu...原创 2020-01-23 08:30:03 · 558 阅读 · 0 评论 -
蓝桥杯练习——最大路径值
题目如下:动态规划看这:https://blog.youkuaiyun.com/zw6161080123/article/details/80639932主要是使用了DFS来找到所有满足的路径,用动态规划找到最长路径,代码如下:#include <iostream>#include <stdio.h>#include <algorithm>#inc...原创 2020-01-20 17:37:42 · 409 阅读 · 0 评论 -
蓝桥杯练习(最长滑雪道)
【代码】蓝桥杯练习(最长滑雪道)原创 2020-01-16 22:17:40 · 1081 阅读 · 2 评论 -
算法笔记_直接插入排序
直接插入排序与冒泡排序作用差不多,是对数组A前1至n个元素有序化.int A[maxn], n;//n为元素个数,数组下标为1到nvoid inselectSort(){ for (int i = 2; i <= n; i++)//进行n-1趟排序 { int temp = A[i], j = i;//temp临时存放A[i],j从i开始往前枚举 while (j &g...原创 2018-05-11 21:47:49 · 234 阅读 · 0 评论 -
归并排序代码注释以及示例(递归和非递归两种)
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;//归并排序的非递归算法(示例用的是下面的)void merge(int a[], int l, int r, int mid){ int temp =...原创 2019-06-29 09:55:49 · 348 阅读 · 0 评论 -
算法练习——逻辑
这一题没有得全分,只有50,希望列表有人留言提醒一下是什么算法:原因是超时,但是也不知道怎样简化复杂度。问题描述 《审美的历程》课上有n位学生,帅老师展示了m幅画,其中有些是梵高的作品,另外的都出自五岁小朋友之手。老师请同学们分辨哪些画的作者是梵高,但是老师自己并没有答案,因为这些画看上去都像是小朋友画的……老师只想知道,有多少对同学给出的答案完全相反,这样他就可以用...原创 2019-07-17 13:58:01 · 210 阅读 · 0 评论 -
算法练习/最小公倍数_蓝桥杯历届试题 核桃的数量
这道题乍一看没反应过来,点了提示发现就是求三个数的最小共倍数,估计这是某一年蓝桥杯代码题的第一题。最小公倍数的求法是:a和b的最小公倍数=a*b/a和b的最大共约数所以变成了求最大公约数了,应用“辗转相除法”:有两整数a和b: ① a%b得余数c ② 若c=0,则b即为两数的最大公约数 ③ 若c≠0,则a=b,b=c,再回去执行①这是求最大共约数的简介代码:int gcd...原创 2019-07-17 15:01:30 · 233 阅读 · 0 评论 -
蓝桥杯历届试题/打印图案问题—— 打印十字图
这种绘图问题大都是初始化数组,将这个二维数组初始化为同一个符号,作为“画布”。再用另一种符号作为“画笔”进行修改填充,这个图形呢,总共分为了三大块进行绘图:四条边,四个拐角,四个顶点。下面题目里的图不清楚所以这就用输出结果替代,这是输出结果:问题描述小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:..$$$$$$$$$$$$$....$....原创 2019-07-17 19:00:21 · 336 阅读 · 0 评论 -
2019网易校招真题练习——俄罗斯方块
小易有一个古老的游戏机,上面有着经典的游戏俄罗斯方块。因为它比较古老,所以规则和一般的俄罗斯方块不同。 荧幕上一共有 n 列,每次都会有一个 1 x 1 的方块随机落下,在同一列中,后落下的方块会叠在先前的方块之上,当一整行方块都被占满时,这一行会被消去,并得到1分。 有一天,小易又开了一局游戏,当玩到第 m 个方块落下时他觉得太无聊就关掉了,小易希望你告诉他这局游戏他获得的分数。...原创 2019-08-02 16:47:27 · 480 阅读 · 0 评论 -
2019网易校招真题练习——瞌睡
题目:小易觉得高数课太无聊了,决定睡觉。不过他对课上的一些内容挺感兴趣,所以希望你在老师讲到有趣的部分的时候叫醒他一下。你知道了小易对一堂课每分钟知识点的感兴趣程度,并以分数量化,以及他在这堂课上每分钟是否会睡着,你可以叫醒他一次,这会使得他在接下来的k分钟内保持清醒。你需要选择一种方案最大化小易这堂课听到的知识点分值。输入描述:第一行 n, k (1 <= n, k <=...原创 2019-08-02 20:12:56 · 312 阅读 · 0 评论 -
蓝桥杯历届真题/带分数————DFS遍历法的一个很好的替代品
这是题目:问题描述100 可以表示为带分数的形式:100 = 3 + 69258 / 714。还可以表示为:100 = 82 + 3546 / 197。注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。类似这样的带分数,100 有 11 种表示法。输入格式从标准输入读入一个正整数N (N<1000*1000)输出格式程序输出该数字用数码1~...原创 2019-07-30 22:57:30 · 510 阅读 · 0 评论 -
蓝桥杯历届真题/错误票据————使用散列(搜索的一个很好的替代品)
不大清楚为啥看了题第一反应是散列。。。应为当时我一想散列遍历起来似乎还可以减小复杂度,可是后来一看提示,叫用的是搜索。这是我对散列的理解:https://blog.youkuaiyun.com/qq_41938259/article/details/80287197主要想法是:初始化散列为false,当该数字出现一次就将对应的散列标记为true。当再次标记发现散列里已经是true时说明是重票,当一个f...原创 2019-08-01 22:06:45 · 276 阅读 · 0 评论 -
leetcode练习(第一天)两数之和,两数相加
题目一给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]...原创 2019-10-04 23:19:33 · 243 阅读 · 0 评论 -
萌新谈STL(下) set,map和pair
前一篇的连接:https://blog.youkuaiyun.com/qq_41938259/article/details/86508174自以为前一篇在算法比赛中比较常用吧,这一篇仅供科普,用于非常规的情况下。set的常见用法:1)set的定义:set<typename> name;2)set数组的定义:set<typename>arrayname[array...原创 2019-06-23 20:54:05 · 256 阅读 · 0 评论 -
数据结构(补漏)___二叉树的层次遍历
原理:如图所示二叉树创建一个队列,A入队,队列里此时只有A。再将A出队同时将两个孩子从左向右入队。队列里此时是BC。B出队同时将B的左孩子D入队。此时队列里是CD。C出队,将C的两个孩子入队,此时队列里是DEF。没有更多的孩子节点了,所以全部出队。所以遍历顺序是ABCDEF。下面给出大致伪代码:void BinaryTreeLevelOrder(BTNode* ro...原创 2019-03-24 16:05:43 · 473 阅读 · 0 评论 -
用DFS求连通块问题
这是题目:先给出输入输出示例图: 代码和注释都比较详细了,如下给出:#include<iostream>#include<cstring>using namespace std;const int maxn = 100;char pic[maxn][maxn];//pic用于表示邻接矩阵int m, n, idx[maxn][maxn]...原创 2019-02-05 13:43:49 · 464 阅读 · 0 评论 -
算法笔记_字符串比较(两种)
#include<iostream>//纯指针#include<cstdlib>#include<cstring>void compare(char *a[],int n);void dictionary_sort(char ar[][100],int n);void print(char *a[],int n);static int y=0;u...原创 2018-05-10 18:45:57 · 218 阅读 · 0 评论 -
算法笔记_进制转换(十六转十)
#include<iostream>#include<cstring>#include<stdlib.h>long long int hashFunc(char s[], int len);using namespace std;int main(void){ long long int ten; char a[9]; cin.get(a, ...原创 2018-05-10 19:02:50 · 309 阅读 · 0 评论 -
算法笔记_进制转换(十转十六)
#include<iostream>#include<cstring>static int m = 0;void hashFunc_Two(long long int x);void Print(char a[],int n);using namespace std;int main(void){ long long int g; cin >>...原创 2018-05-10 19:03:26 · 728 阅读 · 0 评论 -
算法笔记_选择排序
选择排序是冒泡排序的升级版(自认为),就是把已知数组第i到n(n即最后一个元素)的元素有序化.//A为待排序数组,n为数组A的元素个数void selectSort(){ for (int i = 1; i <= n; i++)//进行n趟操作 { int k = i; for (int j = i; j <= n; j++)//选出[i,n]中最小元素,下标为k...原创 2018-05-11 09:31:43 · 139 阅读 · 0 评论 -
算法练习_回文数输出
问题描述 1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。输出格式 按从小到大的顺序输出满足条件的四位十进制数。 #include<iostream>#include<stdlib.h>void bubble_sort(int a[], int n);static int x = 0;using na...原创 2018-05-11 09:37:25 · 436 阅读 · 3 评论 -
算法练习_回文数
问题描述 123321是一个非常特殊的数,它从左边读和从右边读是一样的。 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。输入格式 输入一行,包含一个正整数n。输出格式 按从小到大的顺序输出满足条件的整数,每个整数占一行。样例输入52样例输出899998989989998899数据规模和约定 1<=n<=54。...原创 2018-05-11 09:37:40 · 500 阅读 · 0 评论 -
算法笔记_HASH整数散列
散列(HASH)这种算法,就是为了避免遍历整个数组而计算输入的整数出现的次数.这样大大减少了复杂度.当读入的数为x时,就令hashTable[x]=true(说明:hashTable数组需要初始化为false,表示初始状态下所有数都未出现过.以下程序判断数字x是否出现过#include<iostream>#include<cstdlib>using nam...原创 2018-05-11 22:24:16 · 955 阅读 · 0 评论 -
算法笔记_HASH字符串散列
HASH字符串散列的核心就是进制转换,转化为十进制整数的HASH整数散列,没有什么特别.单纯A到Z(全大写字母)或者a到z(全小写字母)视为26进制.大小写混合视为52进制问题来了,大小写混合还混上字母怎么办呢?有两种想法: 1.一般直接增加至62进制 2.如果是 [字母+数形]式,则方便的多,可以将末尾的数字直接拼接上去.如BCD4中BCD转为731,则结果记为7...原创 2018-05-16 12:27:19 · 536 阅读 · 0 评论 -
算法笔记_Fibonacci数列
Fibonacci数列主要是了解递归的基本格式,即递归边界+递归式的顺序,请牢记.递归式是F(n)=F(n-1)+F(n-2)(n>=2)代码示例如下:#include<iostream>#include<cstdlib>using namespace std;int F(int n);int main(void){ int n; cin ...原创 2018-07-11 14:48:12 · 255 阅读 · 0 评论 -
算法笔记_全排列与N皇后问题
说明:这里的全排列是按字典序的.以下给出从1到3的全排列代码:#include<iostream>#include<stdlib.h>using namespace std;const int maxn = 11;//P为当前排列,hashTable记录整数x是否已经在P中int p[maxn];// 必须申明为全局 bool hashTable[ma...原创 2018-07-11 21:05:50 · 682 阅读 · 6 评论 -
算法笔记_区间贪心
即所谓的区间不相交问题:给出N个开区间(x,y),从中选择尽可能多的开区间,使得这些开区间两两没有交集,问最多找到多少个区间?思路:总选择左端点最大的区间,若左端点一样,就选右端点最小的.给出如下实例代码:#include<iostream>#include<stdlib.h>#include<algorithm>//algorithm意为"算...原创 2018-07-12 20:41:15 · 291 阅读 · 0 评论