![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
文章平均质量分 85
数据结构算法
酷酷咕咕
这个作者很懒,什么都没留下…
展开
-
算法基础知识(考试复习)
算法的特点:算法的特点有:有穷性、可行性、确定性、输入性、输出性。(程序可以是无穷的——操作系统)算法的时间复杂度是对算法效率的度量。最坏情况下的时间复杂度代表了该算法求解输入规模为n的实例所需要的最长时间W(n);而平均情况下的时间复杂度代表了该算法求解输入规模为n的实例所需要的平均时间A(n)。即,在数组中的情况+不在数组中的情况。...原创 2020-03-04 20:51:08 · 1278 阅读 · 0 评论 -
左神小和问题逆序对问题面试
用如下的例子演示归并的过程:merge算法就是分别用两个指针,指向左半部分和右半部分,哪个数小就将哪个数存入help数组,然后该指针指向下一个,直到某一指针越界,将另一组数字都存入help数组即可。最后将help数组中的数移回原数组。#include <iostream>void merge(int a[], int l, int m, int r){ int *help...原创 2020-02-17 18:27:28 · 248 阅读 · 0 评论 -
快速排序过程详解
快速排序是基于交换思想对冒泡排序的一种改进的交换排序方法,称为分区交换排序。快速排序的核心是划分,可以用递归来实现。该段代码摘自《大话数据结构》:L->length(序列长度) L(序列) pivot(枢轴值)由于要用到递归,将排序算法封装起来。void QuickSort(Sqlist *L){ Qsort(L,1,L->length);}void ...原创 2019-11-28 13:20:11 · 340 阅读 · 0 评论 -
全排列(算法笔记)
一般把1~n这n个整数按某个顺序摆放的结果称为这n个整数的一个排列,而全排列指这n个整数能形成的所有排列。现在需要按字典序从小到大输出1 ~ n的全排列。从递归的角度去考虑,把它可以分为若干个子问题:输出以1开头的全排列输出以2开头的全排列输出以3开头的全排列…于是设一个数组p,用来存放当前的排列,再设定一个散列数组hashTable,其中hashTable[x]当整数x已经在数组p中时为true。假设当前已经填好了p[1] ~ p[k-1],准备填p[k]。需要枚举1~n,如果当前枚举的数字原创 2020-05-26 21:37:02 · 414 阅读 · 0 评论 -
大话数据结构顺序表和链表
一 、顺序表基本定义typedef struct{ int data[MAXSIXE]; int len;}SeqList;基本操作//初始化SeqList *Init_SeqList(){ SeqList *L; L=(SeqList*)malloc(sizeof(SeqList)); L->len=0; return L;}//创建线性表void...原创 2019-12-03 20:57:23 · 231 阅读 · 0 评论 -
荷兰国旗问题(分三块)
——堆排序扩展问题已知一个几乎有序的数组,几乎有序是指,如果把数组排好序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。分析: 假设k的值等于7,那么我们申请一个可以容纳8个数的小根堆。将数组下标从0到7的数字放入小根堆中。接着从这个小根堆中弹出一个数,那么这么数就是该数组最小的数,然后再向着个堆中添加一个数,再弹出……这样可...原创 2020-02-22 22:03:03 · 9777 阅读 · 11 评论 -
递归求数组最值
例:用递归求数组上的最大值和最小值。将数组分成左右两个部分,分别求出左右两边的最大值和最小值,再比较即可。画出如下递归树:#include <iostream> void maxAndmin(int a[], int l, int r, int &max, int &min){ if (l == r) { max = min = a[l]; r...原创 2020-02-17 14:14:13 · 439 阅读 · 0 评论 -
左神桶排序和基数排序
桶排序计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。计数排序不是比较排序,所以他优于任何比较排序。我们将一个数组所有数字出现的次数,统计出来,放入一个辅助数组中,然后把辅助数组中统计的数组从小到大,按每个数出现的次数,有几次输出几次就可以得到一个有序的序列。图源:https://www...原创 2020-03-16 19:41:02 · 301 阅读 · 2 评论 -
二分法求近似值
二分法这就是二分法的数学基础。以下是二分法的具体过程,可以解决估计近似值的问题:最后只要近似值与准确值的差不超过题目要求的精度即可,可以不需要计算二分次数。误差分析根据此不等式来确定二分的次数。在程序中循环退出的条件也可以转化为 | b(k+1) - a(k+1) | <= ε。例题分析手算:首先估计二分的次数n。得出次数n后,二分n次就可得出近似值。每次...原创 2020-03-09 17:59:19 · 4227 阅读 · 0 评论 -
最小权顶点覆盖问题分析
问题描述:给定一个赋权无向图 G=(V,E),每个顶点 v∈V 都有一个权值 w(v)。如果 U⊆VU⊆V,且对任意(u,v)∈E 有 u∈U 或 v∈U,就称 U 为图 G 的一个顶点覆盖。G 的最小权顶点覆盖是指 G 中所含顶点权之和最小的顶点覆盖。算法设计:对于给定的无向图 G,设计一个优先队列式分支限界法,计算 G 的最小权顶点覆盖。数据输入:由文件input.txt给出输入数据。第 1 行有 2 个正整数 n 和 m,表示给定的图 G 有 n 个顶点和 m 条边,顶点编号为 1,2,…,原创 2020-07-15 15:50:23 · 9430 阅读 · 5 评论 -
LRU算法数组实现超简单
LRU算法官方的解释有很多,用最通俗的话来说就是,如果你要去排队干活,每个队假如只能排十个人,每次来新人就让新人站在队伍最前面,如果队伍排满了,就要把最懒得不干活得人踢出去,显然现在队伍最后一个人就是最懒的很长时间没干活了,把他踢掉。然后在这十个人里,你要用到十个人中的一个来干活,就直接揪着他的耳朵到最前面去干活,剩下的人依次向后挪一个,如果现在来新人了,就让新人在最前面,最后一个人踢掉,就能完美的保证保留最“新鲜”的打工人了。仔细体会一下上面的算法,然后再思考一下下面的算法。计算机组成原理中,底层实原创 2020-11-25 17:09:14 · 1330 阅读 · 0 评论 -
左神归并排序总结
归并排序用如下的例子演示归并的过程:merge算法就是分别用两个指针p1 、 p2 ,指向左半部分和右半部分,哪个数小就将哪个数存入help数组,然后该指针指向下一个,直到某一指针越界,将另一组数字都存入help数组即可。最后将help数组中的数移回原数组。以下给出完整代码:#include <iostream>void merge(int a[], int l, in...原创 2020-02-19 15:48:51 · 379 阅读 · 0 评论 -
数值计算:设计算法的若干原则
(一)避免相近两数相减当x充分大时:对于小的正数ε:sin(x+ε) – sinx=2cos(x+ε/2)sin(ε/2)(注: sin(x) – sin(y)=2 cos [(x+y)/2] sin [(x-y)/2] )(二)要防止大数“吃掉“小数,注意保护重要数据在五位浮点十进制计算机上,计算y=54321+0.4+0.3+0.4如果按从左到右的顺序进行加法运算,后三个数都...原创 2020-03-18 23:48:31 · 2665 阅读 · 0 评论 -
左神堆排序超详解
堆排序基础堆是具有下列性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。左图是个大根堆,根结点是所有元素中最大的,右图是个小根堆,根结点是所有元素中最小的。如果将这个完全二叉树中的数字,从0开始全部依次排入到数组中,则他的跟结点和左右孩子满足以下关系:堆排序的基本思想是,将待排序的序列构成一...原创 2020-02-21 20:39:45 · 757 阅读 · 0 评论 -
运动员最佳匹配问题(详解)
P[i][j]是男运动员i的女运动员j配对组成混合双打的男运动员竞赛优势;输入样例:(第一行是男队员(或女队员)的个数,第二、三、四行是男运动员i 和女运动员j配对组成混合双打的男运动员竞赛优势,第五、六、七行是女运动员i和男运动员j配合的女运动员竞赛优势)MaxSum是一个1×N的一维数组,用于保存每个男运动员的匹配的最佳女运动员的优势。固定1号男运动员,让所有的n个女运动员与其匹配,经过n次匹配,分别保存每组男女运动员的匹配优势到res数组和最优的男女运动员优势到MaxSum数组。原创 2023-03-11 11:02:23 · 4273 阅读 · 2 评论 -
按位与为0的三元组【详解】
这个题目我也是绕了很久才想明白其核心的思想,以下给出我对于该题目解法的理解。给你一个整数数组 nums ,返回其中 按位与三元组 的数目。按位与三元组 是由下标 (i, j, k) 组成的三元组,并满足下述全部条件:nums[i] & nums[j] & nums[k] == 0 ,其中 & 表示按位与运算符。原创 2023-03-04 19:52:48 · 526 阅读 · 0 评论 -
【CCF】20180902-买菜
问题描述试题编号: 201809-2试题名称: 买菜时间限制: 1.0s内存限制: 256.0MB问题描述: 小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广场把菜装上车,两人都要买n种菜,所以也都要装n次车。具体的,对于小H来说有n个不相交的时间段[a1,b1],[a2,b2]…[an,bn]在装车,对于小W来说有n个不相交的时间段[...原创 2019-12-03 22:19:04 · 116 阅读 · 0 评论 -
【CCF】201903-1小中大
解题思路:这个题重点在于考虑中位数的输出类型。分情况讨论即可,但是一定要细心,将所有可能的情况考虑在内。下面是通过的满分代码:#include <iostream>#include <cstdio>using namespace std;int const MAX=100000;int num[MAX];int main(){ int n;...原创 2019-11-26 23:56:24 · 105 阅读 · 0 评论 -
【CCF】201712-2游戏
问题描述有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐在2号小朋友的顺时针方向,……,1号小朋友坐在n号小朋友的顺时针方向。 游戏开始,从1号小朋友开始顺时针报数,接下来每个小朋友的报数是上一个小朋友报的数加1。若一个小朋友报的数为k的倍数或其末位数(即数的个位)为k,则该小朋友被淘汰出局,不再参加以后的报数。当游戏中只剩下一个小朋友时,该...原创 2019-12-06 11:09:06 · 118 阅读 · 0 评论 -
【CCF】201803-2 碰撞的小球
试题编号: 201803-2试题名称: 碰撞的小球时间限制: 1.0s内存限制: 256.0MB问题描述: 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处。有n个不计体积的小球在线段上,开始时所有的小球都处在偶数坐标上,速度方向向右,速度大小为1单位长度每秒。 当小球到达线段的端点(左端点或右端点)的时候,会立即向相反的方向移动,速度大小仍然为原来大小。 ...原创 2019-12-05 15:13:04 · 98 阅读 · 0 评论 -
【CCF】201609-1 最大波动
试题编号: 201609-1试题名称: 最大波动时间限制: 1.0s内存限制: 256.0MB问题描述: 小明正在利用股票的波动程度来研究股票。小明拿到了一只股票每天收盘时的价格,他想知道,这只股票连续几天的最大波动值是多少,即在这几天中某天收盘价格与前一天收盘价格之差的绝对值最大是多少。输入格式输入的第一行包含了一个整数n,表示小明拿到的收盘价格的连续天数。 第二行包含n个正...原创 2019-12-13 22:28:45 · 118 阅读 · 0 评论 -
【CCF】201503-1图像旋转
试题编号: 201503-1试题名称: 图像旋转时间限制: 5.0s内存限制: 256.0MB问题描述: 旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度。 计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。输入格式 输入的第一行包含两个整数n, m,分别表示图像矩阵的行数和列数。 接下来n行每行包含m个整数,表...原创 2019-12-15 11:32:53 · 71 阅读 · 0 评论 -
【CCF】201412-1门禁系统
试题名称门禁系统(201412-1)问题描述涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况。每位读者有一个编号,每条记录用读者的编号来表示。给出读者的来访记录,请问每一条记录中的读者是第几次出现。输入格式输入的第一行包含一个整数n,表示涛涛的记录条数。第二行包含n个整数,依次表示涛涛的记录中每位读者的编号。输出格式输出一行,包含n个整数,由空格分...原创 2019-11-25 10:48:46 · 101 阅读 · 0 评论 -
【CCF】201703-1分蛋糕
代码具体如下:欢迎指正,互相学习,共同进步!^ - ^#include <iostream>using namespace std;int main(){ int n,k,cake[1000]; cin>>n>>k; for(int i=0;i<n;i++) cin>>cake[i]; ...原创 2019-09-04 00:02:28 · 182 阅读 · 0 评论 -
【CCF】201612-1中间数
试题编号: 201612-1试题名称: 中间数时间限制: 1.0s内存限制: 256.0MB问题描述: 在一个整数序列a1, a2, …, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数。在一个序列中,可能存在多个下标不相同的中间数,这些中间数的值是相同的。 给定一个整数序列,请找出这个整数序列的中间数的值。输入格式 输入的第一行包含了一个整数n...原创 2019-12-13 23:39:39 · 145 阅读 · 0 评论 -
【CCF】201709-1打酱油
试题编号: 201709-1试题名称: 打酱油时间限制: 1.0s内存限制: 256.0MB问题描述: 小明带着N元钱去买酱油。酱油10块钱一瓶,商家进行促销,每买3瓶送1瓶,或者每买5瓶送2瓶。请问小明最多可以得到多少瓶酱油。输入格式 输入的第一行包含一个整数N,表示小明可用于买酱油的钱数。N是10的整数倍,N不超过300。输出格式 输出一个整数,表示小明最多可以得到多少...原创 2019-12-15 10:31:04 · 107 阅读 · 0 评论 -
【CCF】201909-2小明分苹果
解题思路:利用一个(标记数组)来标记苹果是是否有掉落情况。特别需要强调的是:要考虑到同一个苹果树可能有多次掉落的情况,所以在标记的时候应该先判断一下这棵树有没有被标记,否则只能拿到50分,仅仅一个条件50分可见其重要性。判断相邻连续三颗苹果树的掉落情况时可以考虑一下循环队列模除,但我觉得用一个for语句,再加上两种情况的判断比较容易一些。下面是通过的满分代码:#include <...原创 2019-11-25 10:32:56 · 293 阅读 · 0 评论 -
【CCF】201609-2火车购票
试题编号: 201609-2试题名称: 火车购票时间限制: 1.0s内存限制: 256.0MB问题描述: 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配。 假设一节车厢有20排、每一排5个座位。为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10号,依次类推,第20排是96到100号。 购票时,一个人可能购一张或多张票,最多不超...原创 2019-12-12 09:32:27 · 299 阅读 · 2 评论 -
【CCF】201409-2 画图
样例输入21 1 4 42 3 6 5样例输出15评测用例规模与约定1<=n<=100,0<=横坐标、纵坐标<=100。解题思路:用一个二维数组当作画板,刚开始全部置0,画过矩形的地方就标记为1,最后把整个二维数组里的数字相加就是涂上色的格子数了。下面是通过的满分代码:#include <iostream>#include<strin...原创 2019-12-08 23:10:44 · 187 阅读 · 0 评论 -
【CCF】201812-2小明放学
问题描述试题编号: 201812-2试题名称: 小明放学时间限制: 1.0s内存限制: 512.0MB题目背景汉东省政法大学附属中学所在的光明区最近实施了名为“智慧光明”的智慧城市项目。具体到交通领域,通过“智慧光明”终端,可以看到光明区所有红绿灯此时此刻的状态。小明的学校也安装了“智慧光明”终端,小明想利用这个终端给出的信息,估算自己放学回到家的时间。问题描述一次放学的时候,小明...原创 2019-12-02 12:36:09 · 95 阅读 · 0 评论 -
【CCF】201709-2公共钥匙盒
试题编号: 201709-2试题名称: 公共钥匙盒时间限制: 1.0s内存限制: 256.0MB问题描述: 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家。每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中。 钥匙盒一共有N个挂钩,从左到右排成一排,用来挂N个教室的钥匙。一串钥匙没有固定的悬...原创 2019-12-15 11:23:17 · 116 阅读 · 0 评论 -
【CCF】 201809-1 卖菜
试题编号: 201809-1试题名称: 卖菜时间限制: 1.0s内存限制: 256.0MB问题描述: 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜。 第一天,每个商店都自己定了一个价格。店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己和相邻商店的价格调整自己的价格。具体的,每家商店都会将第二天的菜价设置为自己和相邻商店第一天菜价的平...原创 2019-12-13 22:41:53 · 90 阅读 · 0 评论 -
【CCF】 201604-1折点计数
试题编号: 201604-1试题名称: 折点计数时间限制: 1.0s内存限制: 256.0MB问题描述 给定n个整数表示一个商店连续n天的销售量。如果某天之前销售量在增长,而后一天销售量减少,则称这一天为折点,反过来如果之前销售量减少而后一天销售量增长,也称这一天为折点。其他的天都不是折点。如下图中,第3天和第6天是折点。 给定n个整数a1, a2, …, an表示销售量,请计算...原创 2019-12-13 22:56:40 · 143 阅读 · 2 评论 -
【CCF】201903-2 二十四点
这道题我每次写都都会犯一些细节性的错误,然后最后调试的时候真的是怎么都找不出来!然后跟朋友说,让朋友帮忙找,结果朋友一眼看出来!所以,发现代码哪有有错的时候,当排除完你觉得会出错的地方以后,一定要再去看看呢些不是很有可能出错的地方——一般错误可能都在这些小地方就连你自己也想不到。 T>︿<T解题思路:用一个字符数组存储运算符,一个整型数组存储数字,然后找存储规律,先处理乘除,再处理加减。设置...原创 2019-11-28 00:18:20 · 138 阅读 · 2 评论 -
【CCF】201803-1 跳一跳
问题描述试题编号: 201803-1试题名称: 跳一跳时间限制: 1.0s内存限制: 256.0MB问题描述: 近来,跳一跳这款小游戏风靡全国,受到不少玩家的喜爱。 简化后的跳一跳规则如下:玩家每次从当前方块跳到下一个方块,如果没有跳到下一个方块上则游戏结束。 如果跳到了方块上,但没有跳到方块的中心则获得1分;跳到方块中心时,若上一次的得分为1分或这是本局游戏的第一次跳跃则此...原创 2019-12-05 15:49:13 · 82 阅读 · 0 评论 -
【CCF】常用技巧
(持续更新...)万能头文件 —— #include <bits/stdc++.h>有的oj平台可能不能使用,但是ccf考试可以。C++11提供了范围for语句,用来简洁的遍历容器。vector<int> v={0,1,2,3,4,5,6,7};// 用引用可以改变值for (auto &i : v ) //遍历v中每个元素,自动识别其...原创 2019-12-15 10:15:09 · 669 阅读 · 0 评论 -
一元三次方程求解(二分法)
链接:https://ac.nowcoder.com/acm/problem/16694来源:牛客网题目描述有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值 ≥ 1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精...原创 2020-05-06 15:54:10 · 7684 阅读 · 8 评论 -
分草稿纸(二分法)
链接:https://ac.nowcoder.com/acm/contest/374/H来源:牛客网小西小理准备做ACM题来一决胜负,由于做题途中需要演算,小西和小理一起买了一沓草稿纸,草稿纸共有m张,两人将轮流撕走一些草稿纸用来演算。由于题目有些难度,两人每次撕走的数量将不少于前一个人的一半,为了确保这一沓纸可以更经用一些(可以被撕n次,每个人撕都算一次),先撕的人第一次最多可以撕多少张?(必...原创 2020-05-05 14:20:36 · 9602 阅读 · 0 评论 -
用公式求e^x的近似值
分析: 用迭代计算阶乘和x的幂,循环输出区间上的 e^x 的近似值。以下是Java语言的完整代码:static void testFive() { for(double x=0.2;x<=1.0;x+=0.2) { double sum=1,d=1.0,a=1,n=1,b=1;; while(d>=1e-6) { a*=n++; b*=x...原创 2020-03-10 23:46:39 · 5881 阅读 · 0 评论 -
一道非常简单的签到题
链接:https://ac.nowcoder.com/acm/problem/22808来源:牛客网········································································时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K64bit IO Format: %lld···...原创 2020-03-08 22:47:35 · 979 阅读 · 0 评论