- 博客(13)
- 收藏
- 关注
原创 2月5日:今天从“树”说起
说在前面 树是一种特殊的图,在定义上应该归为一种有向无环图,与图的关系甚为紧密。树是一种递归定义,即树的一个节点的子节点仍然是一棵树,每个节点都具有树的意义。 树和图在非线性数据结构中非常重要,在竞赛中也有着广泛的应用。 说并查集 要说树,那就不能不说并查集。并查集在树中是一种较为基础的数据结构。 并查集的意义在于压缩路径,它的基本思想就是将一个祖先节点下的子孙节点都指向这个祖先节点,从而使这个祖先节点下的所有子孙节点都与这个祖先节点成为了父子关系,这样在访问它的子孙节点时所花费的时间将大大减少,不需要再重
2021-02-05 23:46:58
193
原创 2月3日:今天从“最短路径”说起
说在前面 最短路径问题是数据结构图中的一个经典问题,分为单源最短路和多源最短路。 单源最短路是指从一个起点出发,到其他各个顶点的最短路径;多源最短路是指图中任意两点之间的最短路径。 一般采用弗洛伊德(Floyd)算法解决多源最短路问题,采用迪杰斯特拉(Dijkstra)算法解决单源最短路问题。 说弗洛伊德(多源最短路,无负环,动态规划) 如果需要计算图中任意两点之间的最短距离,在数据规模不太大的情况下,可以采用弗洛伊德算法(时间复杂度O(n^3))。 弗洛伊德算法的基本思想是,如果要更新任意两点之间的最短距
2021-02-03 22:48:24
277
原创 2月2日:今天从“链式前向星”说起
说在前面 “链式前向星”,或叫拉链、索引表、静态链表、静态邻接表,等等诸如此类的名称,其实都表示的是利用数组模拟、不采用指针的链表。 链式前向星是建图或者存图的一种的数据结构,在代码编写上由于淘汰了指针更加好写,在执行效率上由于采用了模拟指针的思想效率更高。 在竞赛中面对数据规模较大的题目时采用链式前向星建图有更好的效果,这是由于在数据规模较大如1e5时采用邻接矩阵会爆内存空间而采用邻接链表使用指针极易写错的缘故,而且链式前向星相对于邻接链表可节省更多的空间(指针占用空间较大)。 说说引入 要说链式前向星,
2021-02-02 23:07:40
310
原创 熄灯问题
问题描述 有一个由按钮组成的矩阵,其中每行有6个按钮,共5行。每个按钮的位置上有一盏灯。当按下一个按钮后,该按钮以及周围位置(上边、下边、左边、右边)的灯都会改变一次。即,如果灯原来是点亮的,就会被熄灭;如果灯原来是熄灭的,则会被点亮。在矩阵角上的按钮改变3盏灯的状态;在矩阵边上的按钮改变4盏灯的状态;其他的按钮改变5盏灯的状态。 在上图中,左边矩阵中用X标记的按钮表示被按下,右边的矩阵表示灯状态的改变。对矩阵中的每盏灯设置一个初始状态。请你按按钮,直至每一盏灯都熄灭。与一盏灯毗邻的多个按钮被按下时,一个
2020-07-26 14:36:45
357
1
原创 堆排序
问题描述 随机产生一个长度为10的数组a,其中a[i]∈[0,100),使用堆排序进行从小到大的排序。 输入描述 本题无输入 输出描述 输出两行数据,其中第一行为未经排序的随机数组,第二行为排序后的数组 参考代码 #include<stdio.h> #include<stdlib.h> #include<time.h> void swap(int a[],int...
2020-01-15 10:45:16
237
1
原创 排序数组中找和的因子
问题描述 给定已排序数组arr和整数k,打印arr中所有相加为k的不降序二元组。 输入描述 输入第一行为一个整数n,表示数组的长度 第二行为n个整数,表示已排序的数组arr 第三行为一个整数k,表示相加所要达到的和 输出描述 输出所有相加为k的二元组,其中一个二元组占据一行 如果无解输出“no answer” 样例输入 10 -8 -4 -3 0 2 4 5 8 9 10 10 样例输出 (0,1...
2020-01-14 17:01:54
279
原创 归并排序
问题描述 随机产生一个长度为10的数组a,其中a[i]∈[0,100),使用归并序进行从小到大的排序。 输入描述 本题无输入 输出描述 输出两行数据,其中第一行为未经排序的随机数组,第二行为排序后的数组 参考代码 #include<stdio.h> #include<stdlib.h> #include<time.h> void merget(int sourc...
2020-01-13 19:42:44
200
原创 快速排序
问题描述 随机产生一个长度为10的数组a,其中a[i]∈[0,100),使用快速排序中的单项扫描分区法进行从小到大的排序。 输入描述 本题无输入 输出描述 输出两行数据,其中第一行为未经排序的随机数组,第二行为排序后的数组 参考代码 #include<stdio.h> #include<stdlib.h> #include<time.h> void swap(i...
2020-01-13 10:33:19
377
原创 快速设计一个高效求a的n次幂的算法
问题描述 设计一个算法,求解a的n次幂问题。 输入描述 输入一行两个正整数a,n,分别表示底数与指数 输出描述 输出一个整数,表示a的n次幂 输入样例 2 15 输出样例 32768 参考代码 朴素算法 #include<stdio.h> long long int ans(long long int a,int n){ //通过对a的累乘得到答案,时间复杂度为O(n) long ...
2020-01-12 20:25:35
1748
原创 最长连续递增子序列
问题描述 给定问题描述给定一个长度为n的部分有序的数组,找出其中的最长连续递增子序列。 输入描述 第一行输入一个整数n,表示数组的长度 第二行输入数组中的各个元素 输出描述 输出一个数组,表示给定数组中的最长连续递增子序列 样例输入 10 1 9 2 5 7 3 4 6 8 0 样例输出 3 4 6 8 参考代码 #include<stdio.h> int main(){ int n...
2020-01-12 16:51:24
443
原创 在有空字符串的有序字符串数组中查找
问题描述 字典序是指字符串在字典中的顺序。一般地,对于两个字符串,从第一个字符开始比较,当某一个位置的字符不同时,该位置字符较小的串,字典序较小(例如,abc比bcd小);如果其中一个字符串已经没有更多字符,但另一个字符串还没结束,则较短的字符串的字典序较小(例如,hi比history小)。字典序的概念可以推广到任意序列,例如,序列1,2,,4,7比1,2,5小。 有个经字典序排序后的字符串数{“...
2020-01-12 16:47:35
644
原创 旋转数组的最小元素(改造二分法)
问题描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。 输入描述 第一行为一个整数n,表示数组的长度第二行输入数组中各元素,输入保证符合题意 输出描述 输出一个数字,表示数组的最小元素 样例输入 5 3 4 5 1 2 样例输出 1 参考代码 #include<stdio.h> int sort(int a...
2020-01-12 11:16:09
141
原创 C语言小白上楼梯问题(递归)
问题描述 小白正在上楼梯,楼梯有n阶台阶,小白一次可以上1阶,2阶或者3阶台阶,实现一个方法,计算小白有多少种走完楼梯的方式。 样例输入 3 样例输出 4 参考代码 #include<stdio.h> int f(int n){ if(n<0)return 0; if(n==0||n==1)return 1;//注意n为0时也为一种方式 if(n==2)return 2...
2020-01-12 10:36:41
8483
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人