- 博客(23)
- 收藏
- 关注
原创 201703-2 学生排队 CCF(Java代码实现)
学生排队问题描述 体育老师小明要将自己班上的学生按顺序排队。他首先让学生按学号从小到大的顺序排成一排,学号小的排在前面,然后进行多次调整。一次调整小明可能让一位同学出队,向前或者向后移动一段距离后再插入队列。 例如,下面给出了一组移动的例子,例子中学生的人数为8人。 0)初始队列中学生的学号依次为1, 2, 3, 4, 5, 6, 7, 8; 1)第一次调整,命令为“3号同学...
2018-11-22 20:03:46
553
原创 201703-1 分蛋糕 CCF(Java代码实现)
分蛋糕问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, …, an。小明想分给每个朋友至少重量为k的蛋糕。小明的朋友们已经排好队准备领蛋糕,对于每个朋友,小明总是先将自己手中编号最小的蛋糕分给他,当这个朋友所分得蛋糕的重量不到k时,再继续将剩下的蛋糕中编号最小的给他,直到小明的蛋糕分完或者这个朋友分到的蛋糕的总重量大于等于k。 ...
2018-11-22 19:46:56
738
原创 201709-2 CCF(Java代码实现)
公共钥匙盒 问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家。每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中。 钥匙盒一共有N个挂钩,从左到右排成一排,用来挂N个教室的钥匙。一串钥匙没有固定的悬挂位置,但钥匙上有标识,所以老师们不会弄混钥匙。 每次...
2018-11-21 20:44:07
315
原创 201809-2 CCF(java代码实现)
问题描述 小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广场把菜装上车,两人都要买n种菜,所以也都要装n次车。具体的,对于小H来说有n个不相交的时间段[a1,b1],[a2,b2]...[an,bn]在装车,对于小W来说有n个不相交的时间段[c1,d1],[c2,d2]...[cn,dn]在装车。其中,一个时间段[s, t]表示的是从时刻s到...
2018-11-15 19:40:06
235
原创 201809-1 CCF(java代码实现)
问题描述 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜。 第一天,每个商店都自己定了一个价格。店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己和相邻商店的价格调整自己的价格。具体的,每家商店都会将第二天的菜价设置为自己和相邻商店第一天菜价的平均值(用去尾法取整)。 注意,编号为1的商店只有一个相邻的商店2,编号为n的商店只有一个相邻的...
2018-11-15 19:29:04
301
原创 Robot Motion(机器人运动) java代码实现
A robot has been programmed to follow the instructions in its path. Instructions for the next direction the robot is to move are laid down in a grid. The possible instructions areN north (up the pag...
2018-11-03 16:38:46
1232
原创 立一个flag
作为一个大三程序媛,代码实现能力并不强,今年12月份要考csp,从现在开始,算法更新可能要远远小于csp的练习题,立志一定要在十二月份考过csp,还有我的英语六级!!!...
2018-10-25 20:06:34
218
原创 桶排序
桶排序:不基于比较的排序,与被排序的样本的实际状况很有关系,所以实际中并不经常使用 时间复杂度O(n),额外空间复杂度O(n) 稳定的排序计数排序:实现了桶排序一道实例:给定一个数组,如果排序之后,求相邻两数的最大差值,要求时间复杂度O(n),且要求不能用非基于比较的排序(借用了桶概念,但没有进行桶排序)(1)如果数组中有n个数,就准备n+1个桶,先遍历整个数组...
2018-10-20 23:05:20
134
原创 排序算法的稳定性
排序的稳定性:在排序的过程中,相等的数的顺序不会被改变 (1)三个O(n^2)的排序算法:冒泡排序、插入排序、选择排序 冒泡和插入都可以实现稳定性,但是选择排序无法实现稳定性(2)O(n*logn)的排序算法:归并排序、快排、堆排 归并可以,快排(普通)和堆排不可以 在工程中的综合排序:(1)先判断数组中的类型(2)如果数组中...
2018-10-20 20:11:40
204
原创 堆排
堆排序1)先将数组变成一个大根堆2)将堆顶位置和数组中的最后一个数交换,让堆的大小减一,让剩下的数做heapify3)每次都这么干,直到堆的大小减完!!!堆的问题很重要,几乎所有的贪心问题都需要用堆实现代码实现:package basic_class_01;//堆排序//1)先将数组变成一个大根堆//2)将堆顶位置和数组中的最后一个数交换,让堆的大小减一,让剩下的数做h...
2018-10-19 23:01:23
123
原创 对数器的概念及使用
对数器的概念及使用1.有一个你要测的方法a; 2.实现一个绝对正确即使复杂度不好的方法b; 3.实现一个随机样本产生器; 4.实现比对的方法; 5.把方法a和方法b比对很多次来验证方法a是否正确 6.如果有一个样本使得比对出错,打印样本分析是哪个方法出错 7.当样本数量很多时比对测试依然正确,可以确定方法a已经正确用冒泡排序作为例子:package basic_class...
2018-10-13 12:26:52
252
原创 快排(在上一篇荷兰国旗问题上修改的)
(如果是大一的小学弟小学妹看到这些千万不要慌,耐心的研究,其实并不是很难,我这个老学姐最后悔的就是大一的时候觉得特别难,不想看,但是你早晚都要会这些东西的,实验课上不要粘代码,一定要自己亲手打一打以上是老学姐的忠告:)) 快速排序问题:将数组中的最后一个数来作比较,设为x,将整个数组排列为【<x部分,=x部分,>x部分】再将左侧中的数组和右侧中的数组进行递归处理...
2018-10-12 20:45:18
194
转载 Java脑图
作为一名未来的准Java工程师(嘿嘿,对Java蜜汁执着),在博客上看到了很多Java脑图,觉得这两张图对Java学习应该有帮助,所以copy了两张别人的脑图,希望对我和大家的学习有帮助把:) Java基础脑图 Java知识体系脑图...
2018-10-04 18:10:23
596
转载 使用CSDN如何转载他人博客
前言:我在学习和工作中遇到什么问题,喜欢到CSDN来寻找答案,那么问题来了,当我看到自己喜欢的文章后想转载到自己的博客里,却不知道怎么操作,我百度了很多方法,有些方法已经是很久以前的了,现在浏览器更新了他们的操作步骤都不一样了,今天我根据以前的旧教程,自己摸索了一个最新的方法分享给大家。此教...
2018-10-04 17:51:04
138
原创 荷兰国旗问题
荷兰国旗问题:给定一个数组arr,和一个数num,请把小于num的数放在数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边。要求额外空间复杂度O(1),时间复杂度O(N)。实现思想:当前数和num数比较,如果小于则当前数和小于区域的后一个数交换,如果大于则当前数和大于区域的前一个数交换,等于则当前数不变,指向下一个数再次进行比较,如果当前数和大于区域的第一个数相等时...
2018-09-28 22:17:12
198
原创 求小和问题和逆序对问题
小和问题:在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。解析:也就是数组中看这个数右边有几个数比自己大,如果有一个数比自己大,那么就1*自己,如果有两个,就2*自己。最后将每个数的相加。举例:数组a = {1,3,4,2,5};在1上,看1后面有四个数比自己大,那么就1*4;在3上,看3后面有两个数比自己大,那么就2*3;在4上,看4后面有一个...
2018-09-18 17:50:19
217
原创 归并排序
归并排序思想:一个数组,先将其左部分排好序,再将其右部分排好序,然后用我之前的外排方法,将左部分第一个数设为p1,将右部分第一个数设为p2,如果谁小就将其放到辅助的数组中然后指针向右移一位,最后考虑数组越界问题,如果p1先越界,则将右半部分的数组(没放入辅助数组中的数)全部放入辅助数组中。则整个数组全部排好序。思想: public static void mergeSort(int...
2018-09-17 20:29:53
113
原创 剖析递归行为和递归行为时间复杂度的估算
master公式:也叫主定理。它提供了一种通过渐近符号表示递推关系式的方法。 应用Master定理可以很简便的求解递归方程。T [n] = a*T[n/b] + O (N^d)①当d<log(b,a)时,时间复杂度为O(n^(logb a))②当d=log(b,a)时,时间复杂度为O((n^d)*logn)③当d>log(b...
2018-09-16 20:49:38
271
原创 递归(简单的例子)
eg:在一个数组中,先找到左半部分的最大值,再找到右半部分的最大值。package basic_class_01;public class Code_04_diGui { public static int getMax(int[] arr, int L, int R) { if (L == R) { return arr[L]; } int mid = (L +...
2018-09-16 20:22:51
169
原创 插入排序
插入排序思想:从前两个数开始比较,从0位置上的数开始,和1位置上的数比较,将比较小的数放在前面。然后在前三个数中比较,将比较小的数放在前面。依次循环,到最后所有的数就排完了。思想:public static void insertionSort(int[] arr) { if (arr == null || arr.length < 2) { return;...
2018-09-15 21:43:13
144
1
原创 选择排序
选择排序思想:从头到尾选出一个最小的数放在0位置,再从1-n选出最小的数放在1位置,依次循环。时间复杂度:n+n-1+n-2+...+0 O(N^2)思想:public static void selectionSort(int[] arr) { if (arr == null || arr.length < 2) { ...
2018-09-15 21:30:55
191
1
原创 冒泡排序
冒泡排序思想:从头开始每两个数比较,把大的数放在后面,然后内层循环结束之后,整个数组最大的数换到了最后面。下一次从头到n-1个数,还是从头开始比较,然后把0-n-1的最大的数换到了n-1的位置上。依次循环。时间复杂度为:n+n-1+n-2+...+0 O(N^2)思想:public static void bubbleSor...
2018-09-15 21:23:57
101
原创 认识时间复杂度
常数的操作:一个操作如果和数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。时间复杂度:常数操作量的指标(常用O来表示)具体来说,在常数操作数量的表达式中,只要高阶项,不要低阶项,也不要高阶项的系数,剩下的部分如果记为f(n),则时间复杂度为O(f(n));eg1:若时间复杂度为aN^2+N+1则时间复杂度为O(N^2)eg2:二分法的时间复杂度为O(log2N)...
2018-09-15 21:11:19
131
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人