基本算法与数据结构
萧瑟1
这个作者很懒,什么都没留下…
展开
-
Leetcode 15. 3Sum
题目描述Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.Note:The solution set must not c...原创 2020-01-15 18:04:18 · 187 阅读 · 0 评论 -
找出无序数组第K大/小数的方法(Leetcode 215)
上一篇博客讲解了找出无序数组中位数的方法,找无序数组第K大数的方法跟中位数的方法差不多,K值可以类比成中位数的值,所以方法还是差不多的,分别是1.排序+取值 2.快排思想 3.桶排序。上一篇博客详细讲了这三种方法。在这里附上上一篇博客的链接:找出无序数组中位数的方法这里我们以Leetcode中215题为例进行讲解1 排序+取值这个方法就不多说了。2 快排思想这里主要说一下快排哨兵元素选...原创 2020-01-14 16:02:17 · 802 阅读 · 0 评论 -
找出无序数组中位数的方法
今早上在LintCode上做到了这种类型的题目,题目要求找到无序数组中位数在数组的位置,一开始想到的是利用快排的思想来做,但是由于只有十五分钟的时间,就直接用最普通的方式做了,思路是map记录位置+sort排序,水过去了。找无序数组中位数我想着我之前逛知乎的时候遇到过,用最大堆和最小堆来做的。想了想,遇到这么多次,那就整理下方法吧。这里中位数的定义是数组元素个数/21 直接排序找中位数直接...原创 2020-01-13 13:10:48 · 2990 阅读 · 4 评论 -
中国大学MOOC-陈越、何钦铭-数据结构-2018秋 02-线性结构3 Reversing Linked List (25 分)
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K=3, then you must output 3→2→1→6→5→4; if K=4,...原创 2018-09-17 15:36:48 · 548 阅读 · 0 评论 -
中国大学MOOC-陈越、何钦铭-数据结构-2018秋 02-线性结构4 Pop Sequence (25 分) 栈
Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and pop randomly. You are supposed to tell if a given sequence of numbers is a possible pop sequence of t...原创 2018-09-17 12:19:57 · 473 阅读 · 0 评论 -
配对新郎和新娘问题
三对情侣参加婚礼,三个新郎为 A、B、C,三个新娘为 X 、Y、Z。有人不知道谁和谁结婚,于是询问了六位新人中的三位,但听到的回答是这样的 :A 说他将和 X 结婚 ;X 说她的未婚夫是C ;C 说他将和 Z 结婚。这人听后知道他们在开玩笑,全是假话 。请编程找出谁将和谁结婚 。。。。此题我用了邻接矩阵,根据题目给出的关系给邻接矩阵赋了初值。。虽然算出来了,但是写的贼麻烦。。。这里我把我的...原创 2018-09-08 09:45:46 · 1164 阅读 · 0 评论 -
AOJ 2249 Road Construction 迪杰斯特拉算法
Problem H:King Mercer is the king of ACM kingdom. There are one capital and some cities in his kingdom. Amazingly, there are no roads in the kingdom now. Recently, he planned to construct roads betw...原创 2018-08-21 23:53:05 · 294 阅读 · 0 评论 -
AOJ 2224 Save your cats
Problem C: Nicholas Y. Alford was a cat lover. He had a garden in a village and kept many cats in his garden. The cats were so cute that people in the village also loved them.One day, an evil witc...原创 2018-08-21 23:11:19 · 196 阅读 · 0 评论 -
单源最短路算法spfa 代码实现
代码如下: #include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#include <queue>using namespace std;const int maxn=1005;const int INF=0x3f3f3f...原创 2018-08-21 15:50:39 · 219 阅读 · 0 评论 -
拓扑排序 bfs实现
代码如下:#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#include <vector>#include <queue>using namespace std;const int maxn=505;v...原创 2018-08-19 20:10:31 · 455 阅读 · 0 评论 -
树状数组的建立,修改,求和代码展示(附例题)
树状数组是一个查询和修改复杂度都为log(n)的数据结构。主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元素的值;经过简单修改可以在log(n)的复杂度下进行范围修改,但是这时只能查询其中一个元素的值(如果加入多个辅助数组则可以实现区间修改与区间查询)。(以上来自百度百科)。树状数组通过一个最低位运算(lowbit)来进行区间修改和求和。通过lowbit来将某些元素联系起来。...原创 2018-08-16 23:29:29 · 411 阅读 · 0 评论 -
最小生成树之kruskal算法(附代码)
prim算法是通过找距离最近的节点来扩充最小生成树的,稠密图选择prim算法效率比较高,但是对于稀疏图呢,prim算法就显的比较鸡肋了。对于稀疏图,有一个叫做kruskal的算法。此算法求稀疏图的效率比较高,时间复杂度为O(ElogE)。kruskal算法主要通过找最小的边来合并节点来一步步的生成树的,他一开始将每个节点看成一棵树,然后通过边的关系来进行节点的合并,这里需要对给出的边进行升序排...原创 2018-08-19 15:07:38 · 7786 阅读 · 1 评论 -
数据结构 顺序表 操作集
此顺序表是以数组下标为1开始放入元素的。。。#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#include <math.h>#include <stdlib.h>using namespace std;ty...原创 2018-09-24 11:34:47 · 380 阅读 · 0 评论 -
数据结构与算法题目集(中文) 6-1 单链表逆转 (20 分)
本题要求实现一个函数,将给定的单链表逆转。函数接口定义:List Reverse( List L );其中List结构定义如下:typedef struct Node *PtrToNode;struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */};ty...原创 2018-09-19 18:24:44 · 11173 阅读 · 0 评论 -
PTA 02-线性结构1 两个有序链表序列的合并 (15 分)
本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。函数接口定义:List Merge( List L1, List L2 );其中List结构定义如下:typedef struct Node *PtrToNode;struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Ne...原创 2018-09-15 16:05:07 · 285 阅读 · 0 评论 -
二分图大合集——二分图最大匹配(最小覆盖数),完美匹配以及最优匹配(带权最大匹配) (转载)
转载一位博主的文章:传送门转载 2019-03-10 11:28:25 · 251 阅读 · 0 评论 -
利用graphviz来实现无向图可视化(求最短路径)
1.首先下载graphviz,并安装。2.将输入的边保存起来。3.将最短路径求出,并存储每个顶点的前驱。4.在程序中将建边的代码写入一个dot文件中。5.将dot文件转化为.png形式。6.利用system函数打开.png。代码如下:#include <cstdio>#include <cstring>#include <algori...原创 2018-12-13 21:56:49 · 2628 阅读 · 3 评论 -
根据二叉树的前序和中序或者后序和中序来确定二叉树结构(附例题)
根据中序和前序后序中的任意一种结构就可以确定二叉树的结构。因为中序是按照左中右的顺序来遍历的。而前序是按照中左右的顺序来确定的,我们可以通过按照前序顺序来构建二叉树,通过中序来确定二叉树的左子树和右子树。后序和中序组合也是这样,只不过后序需要从后面开始找。这里给出两个例题:1.前序和中序确定:数据结构与算法题目集(中文) 7-23 还原二叉树 (25 分)给定一棵二叉树的先序遍...原创 2018-12-08 00:17:07 · 3213 阅读 · 1 评论 -
PAT (Advanced Level) Practice 1094 The Largest Generation (25 分)树的层次遍历
A family hierarchy is usually presented by a pedigree tree where all the nodes on the same level belong to the same generation. Your task is to find the generation with the largest population.Input ...原创 2018-11-19 15:54:07 · 130 阅读 · 0 评论 -
数据结构 顺序栈 操作集
代码如下:#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#define STACK_INIT_SIZE 10using namespace std;typedef int ElemType ;struct Stack{ ...原创 2018-10-17 08:01:46 · 284 阅读 · 0 评论 -
数据结构 链表的创建,求链表的长度,插入元素等操作代码展示
今上午老师布置的作业,很不情愿的写了个单链表。。。发现长时间不写确实很难一步写对,调试了20分钟,可算是写完了,感觉应该是对了,测了几组数据没啥问题.....代码如下:#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#inclu...原创 2018-10-10 18:09:12 · 2042 阅读 · 2 评论 -
数据结构 链表实现多项式加法,减法,乘法
加法和减法的实现都比较简单,就是找同类项,但是不要忘了相加或相减系数为0的情况.....乘法比较麻烦,想了想最终决定用插入排序变式来进行排序+同类项合并,即在插入的过程中进行合并....代码如下:#include <cstdio>#include <cstring>#include <algorithm>#include <iostre...原创 2018-10-14 19:54:21 · 752 阅读 · 0 评论 -
Poj 3061 Subsequence 尺取法
A sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000, and a positive integer S (S < 100 000 000) are given. Write a program to find the minimal length o...原创 2018-10-13 13:59:22 · 149 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1147 Heaps (30 分)堆
In computer science, a heap is a specialized tree-based data structure that satisfies the heap property: if P is a parent node of C, then the key (the value) of P is either greater than or equal to (i...原创 2018-09-20 21:23:48 · 186 阅读 · 0 评论 -
最小生成树 prim算法(附代码)
prim算法是以一个根节点开始慢慢往下延伸,不断寻找距生成树最短的距离的节点,然后将该节点纳入生成树的集合中,然后再将该节点影响的其他未纳入生成树节点的距离更新。(缩小与生成树的距离),重复操作,直至全部节点纳入集合或者没有节点纳入集合为止。prim算法的时间复杂度为O(V^2);代码如下:#include <cstdio>#include <cstring>...原创 2018-08-19 12:21:05 · 13176 阅读 · 4 评论 -
C++ vector 容器使用代码展示
1.遍历与增加元素:遍历有两种方法//vector的遍历void traverse (){ vector <int>a; int n; scanf("%d",&n); for (int i=0;i<n;i++) { int x; scanf("%d",&x); a...原创 2018-08-18 11:50:35 · 507 阅读 · 0 评论 -
邻接表模板+最短路径dfs
代码如下:#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#include <malloc.h>using namespace std;const int maxn=5005;const int INF=0x7fffff...原创 2018-08-04 12:20:54 · 677 阅读 · 0 评论 -
0x7fffffff与0x3f3f3f3f
0x7fffffff和0x3f3f3f3f都是十六进制的数,0x7fffffff表示的是32字节的最大值,而0x3f3f3f3f的两倍还不如前者大,但某些时候后者比前者好用,比如与另一个数相加,这时结果会溢出,变为负数。所以说最大的不一定是最好的。#include <cstdio>#include <cstring>#include <algorithm&g...原创 2018-08-04 11:14:33 · 1857 阅读 · 0 评论 -
div3 round#494 D. Coins and Queries
此题的意思为给出n个硬币和q次查询,值得注意的是,硬币的价值是2的某次方,然后给出一个总价值b,然后让你找出是否有一些硬币加起来等于这个价钱,如果有则输出硬币的个数,如果没有则输出-1.第一次做的时候想的比较简单,直接暴力减,然后超时了,然后看了看超时的数据,发现事情并不简单,第2组数据给的全是1,顿时恍然大悟,觉得自己还是太蠢了,于是想了个方法,是这样的:如果这个价值的硬币存...原创 2018-07-05 14:19:38 · 186 阅读 · 0 评论 -
最大子列和问题
这是一个挺简单问题,但是由于最近考试有点频繁,加上很久以前写过这个题目,所以就来复习下,感觉以前学的东西都忘的差不多了,有点慌啊。感觉这一段时间需要复习下了。不复习要歇逼了。。。言归正传,求最大子序列问题:有很多种方法,这里就说一下时间复杂度最简单的算法,此算法只需要遍历一遍就可以,所以时间复杂度为O(n)。定两个变量ThisSum和Max,This初始化为0,Max等于数组中的第一个元素...原创 2018-07-22 16:53:54 · 544 阅读 · 0 评论 -
快速筛选素数方法
筛选2-N素数有很多方法,最一般的方法就是利用素数的定义也就是利用素数只能被本身和1整除的性质进行筛选。但是这个方法效率太低,不建议使用这个方法。有这麽一种方法,好像叫做爱拉托逊斯筛选法(我也不是很清楚)它的基本思想是:把从1开始的、某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉。剩下的数中选择最小的数是素数,然后去掉它的倍数。依次类推,直到筛子为空时结束。(来自百度百科...原创 2018-07-27 10:24:20 · 2368 阅读 · 0 评论 -
hdoj 2544 最短路
在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗? Input输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是...原创 2018-07-30 13:46:13 · 118 阅读 · 0 评论 -
hdoj 1232 畅通工程 并查集
某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?Input测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M;随后的M行对应M条道路,每行给出一...原创 2018-07-30 13:34:14 · 190 阅读 · 0 评论 -
hdoj 1754 I Hate it
很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。Input本题目包含多组测试,请处理到文件结束。在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=200000,0<M<5000...原创 2018-07-30 13:28:53 · 179 阅读 · 0 评论 -
hdoj 1166 敌兵布阵 树状数组的应用
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。中央情报局要研究敌人究竟演习什么战术,所以...原创 2018-07-30 13:19:14 · 145 阅读 · 0 评论 -
辗转相除法
最近闲来无事,把之前学过的复习一下,什么叫辗转相除法呢(以下来自百度百科)辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。 从以上...原创 2018-07-26 16:12:45 · 4591 阅读 · 0 评论 -
poj 1611 The Suspects 并查集
The SuspectsTime Limit: 1000MS Memory Limit: 20000K Total Submissions: 49056 Accepted: 23475 DescriptionSevere acute respiratory syndrome (SARS), an atypical pneumonia of unkno...原创 2018-07-31 15:25:34 · 168 阅读 · 0 评论 -
快速幂模板
#include <cstdio>#include <algorithm>#include <iostream>#include <cstring>using namespace std;int fastpow (int a,int b){ int sum=1,temp=a; while (b) { ...原创 2018-07-31 16:31:03 · 118 阅读 · 0 评论 -
Floyd 求多源最短路径模板
代码如下:#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;const int maxn=1005;const int INF=0x3f3f3f3f;int mapp[maxn][maxn];...原创 2018-08-05 11:32:58 · 138 阅读 · 0 评论 -
线段树的区间更新+懒惰标记
这一部分感觉是最难的一部分了。想要更新区间的值,可以通过一个for循环进行单点更新。。但是这样貌似比普通的遍历还慢。所以,聪明的人们想到了一个好办法解决线段树不能解决区间更新的问题。通过一个懒惰标记来对已经更新的区间进行标记,然后计算出值,然后直接返回,不在更新子节点的值了。当进行多次更新的时候,这时候就可以通过下推标记进行更新子节点。代码如下:下推懒惰标记://下推懒...原创 2018-08-12 16:15:44 · 1301 阅读 · 0 评论