数据结构与算法
文章平均质量分 61
TUJC
这个作者很懒,什么都没留下…
展开
-
工号不够用了怎么办?
注意:新工号不能全为字母或者数字,允许数字部分有前导0或者全为0。但是过长的工号会增加同事们的记忆成本,现在给出新工号至少需要分配的人数X和新工号中字母的长度Y,求新工号中数字的最短长度Z。3020年,空间通信集团的员工人数突破20亿人,即将遇到现有工号不够用的窘境。现在,请你负责调研新工号系统。新工号由一段英文字母开头,之后跟随一段数字,比如"aaahw0001",“a12345”,“abcd1”,“a00”。一行两个非负整数 X Y,用数字用单个空格分隔。输出新工号中数字的最短长度Z。原创 2022-09-07 20:54:40 · 542 阅读 · 1 评论 -
最长的顺子
斗地主起源于湖北十堰房县,据说是一位叫吴修全的年轻人根据当地流行的扑克玩法“跑得快”改编的,如今已风靡整个中国,并流行于互联网上。可用的牌 3原创 2022-09-07 20:07:18 · 2087 阅读 · 1 评论 -
Java集合和数组的区别
数组和集合都是java中的容器。数组 大小固定,只能存储相同数据类型的数据集合 大小可动态扩展,可以存储各种类型的数据1、类型声明:数组声明了它容纳的元素的类型,而集合不声明。数组是静态的,一个数组实例具有固定的大小,一旦创建了就无法改变容量了,而且生命周期也是不能改变的,还有数组会做边界检查,如果发现有越界现象,会报RuntimeException异常错误,当然检查边界会以效率为代价。集合的长度是可变的,可以动态扩展容量,可以根据需要动态改变大小,集合提供更多的成员方法,能满足更多的需求。原创 2022-09-05 22:34:25 · 4288 阅读 · 0 评论 -
hashMap
在jdk1.8里,对数据结构做了进一步优化,引入了红黑树,当链表长度大于8的时候,链表就会转成红黑树,利用红黑树快速增删改查的特点提高HashMap的性能,其中会用到红黑树的插入、删除、查找等算法。作为不可变类天生是线程安全的,当然Java里的数组是无法自动扩容的,方法是使用一个新的数组代替已有的容量小的数组,就像我们用一个小桶装水,如果想装更多的水,就得换大水桶。向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载更多的元素时,对象就需要扩大数组的长度,以便能装入更多的元素。原创 2022-09-04 22:24:24 · 528 阅读 · 0 评论 -
3查找算法
插值查找算法类似于二分查找,不同的是插值查找每次从自适应mid处开始查找。将二分查找中的求mid索引的公式,low表示左边索引left,high表示右边索引right.key就是前面我们讲的findVal/插值索引/对应前面的代码公式。...原创 2022-07-29 15:53:42 · 94 阅读 · 0 评论 -
2.6基数排序(桶排序)
1)基数排序(radixsort)属于“分配式排序”(distributionsort),又称“桶子法”(bucketsort)或binsort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用;2)基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法;3)基数排序(RadixSort)是桶排序的扩展;4)基数排序是1887年赫尔曼·何乐礼发明的。它是这样实现的将整数按位数切割成不同的数字,然后按每个位数分别比较。[注;...原创 2022-07-29 14:57:04 · 317 阅读 · 0 评论 -
2.5快速排序
快速排序(Quicksort)是对冒泡排序的一种改进。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。...原创 2022-07-29 13:43:35 · 109 阅读 · 0 评论 -
2.4希尔排序
希尔排序是希尔(DonaldShell))于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序,随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。...原创 2022-07-29 13:14:16 · 121 阅读 · 0 评论 -
2.3插入排序
插入排序(InsertionSorting属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。...原创 2022-07-29 10:32:42 · 77 阅读 · 0 评论 -
2.2选择排序
选择排序(selectsorting)也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。第一次从arr[0]~arr[n-1]中选取最小值,与arr[0]交换;第二次从arr[1]~arr[n-1]中选取最小值,与arr[1]交换;第三次从arr[2]~arr[n-1]中选取最小值,与arr[2l交换;…,第i次从arr[i-1]~arr[n-1]中选取最小值,与arr[i-1]交换;…,...原创 2022-07-29 10:27:52 · 90 阅读 · 0 评论 -
2.1冒泡排序(Bubble Sorting)
通过对待排序序列从前向后,依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。小结上面的图解过程(1)一共进行数组的大小-1次大的循环;(2)每一趟排序的次数在逐渐的减少;(3)如果我们发现在某趟排序中,没有发生一次交换,可以提前结束冒泡排序。这个就是优化因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较。...原创 2022-07-29 10:19:45 · 105 阅读 · 0 评论 -
2、排序算法概述
排序也称排序算法(SortAlgorithm),排序是将一组数据,依指定的顺序进行排列的过程。原创 2022-07-29 10:10:45 · 178 阅读 · 0 评论 -
递归-八皇后问题
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法(92)。...原创 2022-07-29 09:40:37 · 104 阅读 · 0 评论 -
1.4、栈
1)栈的英文为(stack)2)栈是一个先入后出(FILO-FirstInLastOut)的有序列表。3)栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。4)根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。5)图解方式说明**出栈(pop)和入栈(push)**的概念。...原创 2022-07-28 19:49:06 · 154 阅读 · 0 评论 -
1.3、链表
链表是有序的列表,但是它在内存中是存储如下1)链表是以节点的方式来存储,是链式存储;2)每个节点包含data域,next域指向下一个节点;3)如图发现链表的各个节点不一定是连续存储;原创 2022-07-27 23:38:53 · 91 阅读 · 0 评论 -
1.2、队列
1)队列是一个有序列表,可以用数组或是链表来实现。2)遵循先入先出的原则。即先存入队列的数据,要先取出。后存入的要后取出3)示意图(使用数组模拟队列示意图)原创 2022-07-27 22:51:01 · 67 阅读 · 0 评论 -
1.1、稀疏数组
当一个数组中大部分元素为0,或者为同一个值的数组时,可以用稀疏数组来保存该数组。1)记录数组一共有几行几列,有多少个不同的值2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。......原创 2022-07-27 22:37:31 · 82 阅读 · 0 评论