算法笔记
文章平均质量分 89
平常学习算法的时候,自己记的一些笔记,主要讲解一些算法以及对应的相关题目,不定期更新,希望可以帮到别人以及鞭策自己一点一点进步
bogedaye
加油!!!
展开
-
985考研上岸之数据结构部分(很全,抓住重点)
考研数据结构-Data Structure of Kao YanZhou Bo(Suzhou University of Science and Technology)Email:[email protected] QQ:2364339378主要王道代码风格太乱了(怀疑不是一个人敲的,我统一了一下)有问题的地方欢迎评论区指正~ 参考:王道+一些算法模板线性表那一块应该主要考察算法要不就是双指针,要不就是分治,实在不行就是暴力,自己主要练一下链表那块的规范因此主要整理树(重中之重)、图、串这一原创 2021-11-01 10:31:46 · 1303 阅读 · 2 评论 -
【洛谷试炼场】新手村:循环!循环!循环!
P1008 三连击题目描述:将1,2,⋯,9共9个数分成3组,分别组成3个三位数,且使这3个三位数构成1:2:3的比例,试求出所有满足条件的3个三位数。输入格式:没有输入输出格式:若干行,每行3个数字。按照每行第一个数字升序排列。C++源代码:#include<stdio.h>int main(){ short a,i,n[9],*b,*d;...原创 2019-02-05 18:20:11 · 495 阅读 · 2 评论 -
【洛谷试炼场】新手村:顺序与分支
P1422 小玉家的电费题目描述:夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上面写:据闽价电[2006]27号规定,月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行,月用电量在151~400千瓦时的部分按每千瓦时0.4663元执行,月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行;小玉想自己验证一下,电费...原创 2019-02-03 12:08:05 · 459 阅读 · 0 评论 -
【洛谷试炼场】新手村:洛谷的第一个任务
P1001 A+B problem题目描述:输入两个整数a,b,输出它们的和(|a|,|b|<=10^9)C语言源代码:#include<stdio.h>int main(){ int a,b;//声明变量a,b scanf("%d %d",&a,&b);//输入a,b printf("%d",a+b);//输出a+...原创 2019-02-02 15:53:13 · 478 阅读 · 0 评论 -
C++实现二叉树的存储结构与基本操作
一般来说,二叉树使用链表来定义。和普通链表的区别是,由于二叉树每个结点有两条出边,因此指针域变成了两个结点–分别指向左子树的根结点地址和右子树的根结点地址。如果某个子数不存在,则指向struct node{ typename data;//数据域 node* lchild;//指向左子树根结点的指针 node* rchild;//指向右子树根结点的指针}; //由于在二叉树建树前...原创 2020-04-17 22:11:24 · 936 阅读 · 0 评论 -
STL库中的queue使用注意事项
复制粘贴运行程序 比较注释部分和非注释部分的区别//当使用STL的queue时,元素入队的push操作只是制造了该元素的一个副本入队//因此在入队后对原元素的修改不会影响队列中的副本 //而队列中副本的修改也不会改变原元素,需要注意由此可能引入的bug(一般由结构体产生) //所以是啥bug??? //#include<cstdio>//#include<queue&...原创 2020-04-15 17:32:58 · 254 阅读 · 0 评论 -
用两种DFS(一种最基本的,一种通过剪枝)解决0-1背包问题
DFS实现0-1背包问题有两种方式,第一种方式效率较低,因为每次都有两种选择,且总是把n件物品的选择全部确定之后才去更新最大价值,但是事实上忽视了背包容量不超过V这个特点。也就是说,完全可以把对sumW+w[index]<=V的判断加入到“岔道口”中,只有当sumW+w[index]<=V时才进入岔道,这样效率会高很多,也就是我们的第二种方式。这种通过题目条件的限制来节省DFS的计算量...原创 2020-04-14 11:17:17 · 325 阅读 · 0 评论 -
静态链表【初学者不太熟练动态链表时采取的一种替代手段】
我们知道,动态链表需要指针来建立结点之间的连接关系,但事实上,对有些问题来说,结点的地址是比较小的整数(比如5位整数),那么这时我们大可不必建立动态链表,建立静态链表就足够了,这样程序编写的时候也会减少许多问题。静态链表的原理是hash,即通过建立一个结构体数组,并令数组的下标直接表示结点的地址,来达到直接访问数组中的元素就能访问结点的效果。另外,由于结点的访问非常方便,因此静态链表是不需要建立...原创 2020-04-12 16:05:34 · 162 阅读 · 0 评论 -
C++实现链表的四个基本操作
链表的基本操作无非四种情况:1.创建链表;2.查找元素;3.插入元素;4.删除元素。下面对这四个操作用C++实现一波。已调试验证完毕,读者仔细领会!!!#include<stdio.h>#include<stdlib.h>struct node{ int data; node* next;};//创建链表 node* create(int array[]...原创 2020-04-11 22:07:12 · 449 阅读 · 1 评论 -
[codeup1918]简单计算器
题目描述:读入一个只包含+,-,*,/的非负整数计算表达式,计算该表达式的值。输入格式:测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间有一个空格。没有非法表达式。当一行中只有0输入时结束,相应的结果不要输出。输出格式:对每个测试用例输出1行,即该表达式的值,精确到小数点后两位。源程序:#include<iostream>#include...原创 2020-04-10 22:45:58 · 138 阅读 · 0 评论 -
堆与堆排序在优先级队列中的应用
1.堆1.1 堆的定义与基本操作堆是一颗完全二叉树,数中每个结点的值都不小于(或不大于)其左右孩子的结点的值。其中,如果父亲结点的值大于等于孩子结点的值,那么称这样的堆为大顶堆,这时每个结点的值都是以它为根结点的子数的最大值;如果父亲结点的值小于等于孩子结点的值,那么称这样的堆为小顶堆,这时每个结点的值都是以它为根结点的子数的最小值。堆一般用于优先队列的实现,而优先队列默认使用大顶堆,因此我以...原创 2020-02-28 11:46:30 · 149 阅读 · 0 评论 -
并查集与路径压缩
1.1并查集的定义所谓并查集就是“Union(合并)”,“Find(查找)”,“Set(集合)”对应的中文翻译,集合是指对集合操作的,而支持的操作就是Union和Find:1)合并:合并两个集合。2)查找:判断两个元素是否在一个集合。好,定义我们知道了,那么并查集是如何实现的呢?其实就是一个数组:int father[N];其中father[i]表示元素i的父亲结点,而父亲结点本身也...原创 2020-02-27 20:27:29 · 490 阅读 · 0 评论 -
迷宫问题之BFS
迷宫问题是BFS的经典应用题目:给定一个nm大小的迷宫,其中代表不可通过的墙壁,而‘.代表平地,S表示起点,T表示终点。移动过程中,如果当前位置是(x,y)(下标从0开始),且每次只能前往上下左右四个位置的平地,求从起点S到达终点T的最少步数。样例:. . . . .. * . * .. * S * .. * * * .. . . T *在上面样例中,S的坐标为(2,2),T...原创 2020-02-20 18:07:37 · 236 阅读 · 0 评论 -
从一道题目体会BFS思想
题目描述:给出一个m*n的矩阵,矩阵中的元素为0或1。称位置(x,y)与其上下左右四个位置是相邻的。如果矩阵中有若干个1相邻(不必两两相邻),则称这些1构成了一个块。求给定矩阵中的块数。输入:0 1 1 1 0 0 10 0 1 0 0 0 00 0 0 0 1 0 00 0 0 1 1 1 01 1 1 0 1 0 01 1 1 1 0 0 0输出:4思路1.首先根据输入输...原创 2020-02-18 21:09:02 · 184 阅读 · 0 评论 -
素数表获取的朴素算法与埃氏筛法
朴素算法可以先来看看一道简单的题目:试打印 1 - n 范围内的素数表。分析:好,我们从1~n进行枚举,判断每个素数是否是素数,如果是素数,则加入素数表。那么这个算法的时间复杂度是多少呢?可以看到,枚举部分的复杂度是O(n),而判断素数的算法是O(n^1/2),因此总复杂度是O(n * n ^1/2)。但是显然这个复杂度对n超过10 ^ 5的情况来说是有问题的。因为对一般的oj系统来说,一...原创 2019-10-23 08:12:00 · 171 阅读 · 0 评论 -
DP(动态规划)解决01背包问题
背包问题背包问题是一类经典的动态规划问题(DP问题),非常灵活、变体多样,然我想最基础的背包问题透彻理解之后,变体问题自然迎刃而解。下面介绍两类最简单的背包问题:01背包问题和完全背包问题,而两类问题之中,又以01背包问题为重。01背包问题我们先来看看01背包问题的题目吧:有n件物品,每件物品的重量为w[i],价值为c[i]。现有一个容量为V的背包,问如何选取物品放入背包,使得背包内物品的...原创 2019-10-19 14:57:40 · 657 阅读 · 0 评论 -
打表与活用递推
本篇博客主要介绍一些编程技巧:一个是打表,一个则是活用递推1、打表打表是一种典型的用空间换时间的技巧,是指将所有可能需要用到的结果事先计算出来,这样后面需要用到时就可以直接查表获得。打表常见的用法有如下几种:在程序中一次性计算处所有需要用到的结果,之后的查询直接取这些结果这个是最常用到的用法,例如在一个需要查询大量Fibonacci数F(n)的问题中,显然每次从头开始计算是非常耗时的,...原创 2019-10-15 20:19:52 · 176 阅读 · 0 评论 -
递归
我们先来看一个另外的名词的定义:分治。什么叫分治,顾名思义:“分而治之”,也就是说,分治法将原问题分成若干个规模较小而结构与原问题相同或相似的子问题,然后分别解决这些问题,最后合并子问题的解,即可得到原问题的解。好,我们言归正传,先来看看一个看似玩笑的对递归的定义:“要理解递归,你要先理解递归,直到你能理解递归”。是不是有点绕?然而这对递归的解释却是十分直观的。递归就在于反复调用自身函数,但是每...原创 2019-10-12 15:05:56 · 212 阅读 · 0 评论