算法&数据结构
文章平均质量分 58
Duktig丶
这个作者很懒,什么都没留下…
展开
-
【两个栈实现队列 】和【两个队列实现栈】
作者:duktig博客:http://duktig.cn/优秀还努力。愿你付出甘之如饴,所得归于欢喜。源码:https://github.com/duktig666/algorithm用两个栈实现队列用两个栈来实现一个队列,完成队列的 Push 和 Pop 操作。源码参看:https://github.com/duktig666/algorithm/blob/main/src/datastructure/queue/impl/StackQueue.java思路新元素进栈1弹出元素时,分原创 2021-08-27 09:26:56 · 122 阅读 · 0 评论 -
Java实现动态循环队列
Java实现数组队列Java实现循环队列Java实现动态循环队列原创 2021-06-06 08:47:24 · 939 阅读 · 1 评论 -
Java 实现稀疏数组
稀疏数组定义稀疏数组可以看做是普通数组的压缩,但是这里说的普通数组是指无效数据量远大于有效数据量的数组。使用场景稀疏数组有很多的使用场景,比如五子棋(思路:单数为黑棋,双数为白棋;数字从小到大可记录下棋顺序),棋盘很大,但是一盘下完后,大部分的位置都是没有棋字的。这是可以使用稀疏数组存储,使用时也可以还原成初始的二维数组。举例例如如下数组,即可使用稀疏数组压缩:0 0 0 0 0 0 0 0 0 0 00 0 1 0 0 0 0 0 0 0 00 0 0 0 2 0 0 0 0 0原创 2021-05-30 11:47:51 · 272 阅读 · 0 评论 -
Java实现二分查找
二分查找法算法思想有序的序列,每次都是以序列的中间位置的数来与待查找的关键字进行比较,每次缩小一半的查找范围,直到匹配成功。一个情景:将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。参考:https://baijiahao.baidu.com/s?id=166975原创 2021-05-02 14:00:03 · 370 阅读 · 0 评论 -
Java实现链表
背景学习数据结构,必然要用一门语言将数据结构实现出来,一方面加深对数据结构的理解,另一方面可以了解这门语言实现数据结构的特点。将数据结构Java实现总结下来,方便之后复习和间隔时间手撸代码具体实现思路在Java的注释中写的已经很明显,不再做过多的阐述。代码实现public class LinkedList<E> { /** * 内部类:表示链表的节点 */ private class Node<E> { /** 所存储原创 2021-02-15 15:20:20 · 366 阅读 · 0 评论 -
Java实现顺序表并实现动态扩容
背景学习数据结构,必然要用一门语言将数据结构实现出来,一方面加深对数据结构的理解,另一方面可以了解这门语言实现数据结构的特点。将数据结构Java实现总结下来,方便之后复习和间隔时间手撸代码具体实现思路在Java的注释中写的已经很明显,不再做过多的阐述。实现方式使用动态数组来实现顺序表。代码实现public class SequenceList<E> { /** 存储对象的一维数组 */ private E[] data; /** 顺序表的元素个数 */原创 2021-02-05 21:26:56 · 673 阅读 · 3 评论 -
Java如何实现矩阵运算
矩阵运算的Java实现简介Java实现两个矩阵相乘,并输出新的矩阵的值。蓝桥杯算法——矩阵乘法,Java实现。输入两个矩阵,分别是m*s,s*n大小。输出两个矩阵相乘的结果。输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200)。 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。 接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。输出格式 m行,每行n个空格隔开的整数,输出相乘後的矩阵C(i,j)的值。原创 2020-06-02 18:32:03 · 4445 阅读 · 0 评论 -
蓝桥杯题库竟有这种算法题!!!震惊——送分啦
今天在刷到蓝桥杯算法题的时候,竟然遇到了这样一道算法题(具体如下文),真是打破了我对算法的常规认知,怪我太单纯?看到题目可能莫名其妙,但是答案竟然只需要输出一个yes即可通过。关于这道算法题我只能感慨算法的世界无奇不有,我辈仍需努力。。。这题想得分吗?想,请输出“yes”;不想,请输出“no”。原创 2020-05-28 15:46:36 · 435 阅读 · 1 评论 -
Java二进制、八进制、十进制、十六进制及其相互转换
Java二进制、八进制、十进制、十六进制及其相互转换进制的基本介绍所有数字在计算机底层都以二进制形式存在。对于整数,有四种表示方式:二进制(binary): 0,1 ,满2进1.以0b或0B开头。十进制(decimal): 0-9 ,满10进1。八进制(octal): 0-7 ,满8进1. 以数字0开头表示。十六进制(hex): 0-9及A-F,满16进1. 以0x或0X开头表示。此...原创 2020-03-28 22:31:05 · 1672 阅读 · 0 评论 -
(Java)排序算法(八)——计数排序(Count Sort)
堆排序(Count Sort)基本思想计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。一句话:用辅助数组对数组中出现的数字计数,元素转下标,下标转元素。算法描述①找出待排序的数组中最大和最小的元素;②统计数组中每个值为i的元素出现的次数,存入数组helper的第i项;③利用偏差解决数组中...原创 2020-03-27 23:15:45 · 623 阅读 · 0 评论 -
(Java)排序算法(七)——堆排序(Heap Sort)
堆排序(Heap Sort)定义堆排序:是指利用堆这种数据结构所设计的一种排序算法。大根堆:每个结点的值都大于等于其左右孩子结点的值。小根堆:每个结点的值都小于等于其左右孩子结点的值。性质子结点的键值或索引总是小于(或者大于)它的父节点。完全二叉树的结构基本思想将待排序列构造成一个大顶堆(或小顶堆),整个序列的最大值(或最小值)就是堆顶的根结点,将根节点的值和堆数组的末尾...原创 2020-03-27 21:22:33 · 213 阅读 · 0 评论 -
(Java)排序算法(六)——快速排序(Quick Sort)
排序算法总结有关概念排序:将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。排序算法的稳定性:稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b前面,而a=b,排序之后a有可能会出现在b的后面。内排序:所有排序操作都在内存中完成。外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行。时间复杂度:描...原创 2020-03-27 20:36:53 · 344 阅读 · 1 评论 -
(Java)排序算法(五)——归并排序(Merge Sort)
归并排序(Merge Sort)基本思想归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。算法描述①把长度为n的输入序列分成两个长度为n/2的子序列;②对这两个子序列分别采用归并排...原创 2020-03-26 21:31:59 · 240 阅读 · 0 评论 -
(Java)排序算法(四)——插入排序(Insertion Sort)和希尔排序(Shell Sort)
插入排序(Selection Sort)和希尔排序(Shell Sort)插入排序基本思想对于未排序的元素,在已排序的元素中从后向前扫描,找到合适的位置后插入。在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。简介插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的...原创 2020-03-26 21:22:02 · 225 阅读 · 0 评论 -
(Java)排序算法(三)——选择排序(Selection Sort)
选择排序(Selection Sort)基本思想每次都从未排序的数组中找到最小的元素,然后放在未排序元素最前端。选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。算法描述n个记录的直接选...原创 2020-03-26 21:03:36 · 461 阅读 · 0 评论 -
(Java)排序算法(二)——冒泡排序(Bubble Sort)
冒泡排序基本思想两个数比较大小,较大的数下沉,较小的数冒起来。简介冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。算法描述①比较相邻的元素。如果第一个比第二个大,就交换它们两个;②...原创 2020-03-26 20:56:37 · 1038 阅读 · 5 评论 -
(Java)排序算法(一)——排序算法简介
排序算法简介有关概念排序:将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。排序算法的稳定性:稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b前面,而a=b,排序之后a有可能会出现在b的后面。内排序:所有排序操作都在内存中完成。外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行。时间复杂度:描...原创 2020-03-26 20:49:33 · 208 阅读 · 0 评论 -
(Java)算法——递归总结
递归总结定义递归递归是一种在程序设计语言中广泛应用算法。一种编程思想和技巧。 其主要特点就是通过反复调用自身函数来解决问题。递归函数直接或间接调用自身的函数称为递归函数。它通常把一个大型复杂的问题层层转化成一个与原问题相似的规模较小的问题来求解。递归基本思想将问题分解:把一个不能或不好解决的大问题转化为一个或几个小问题,再把这些小问题进一步分解成更小的小问题,最小问题可以直接解决...原创 2020-03-12 16:57:56 · 1933 阅读 · 0 评论 -
(Java)算法——位运算在算法题中的应用
位运算在算法题中的应用上篇博客总结的位运算的基础和基本的使用,这篇博客总结一下位运算在一些算法题中的使用上篇博客:位运算基础及基本应用题1数组1-1000中(1001个数),有唯一一个重复的数,其他数只出现一次,求唯一一个重复的数。要求:数组元素只能访问一次,不使用辅助空间解题思路代码实现 public static int findRepetitionNum ( int[] ar...原创 2020-03-05 12:19:26 · 435 阅读 · 0 评论 -
(Java)算法——位运算基础及基本应用
位运算基础在处理整形数值时,可以直接对组成整形数值的各个位进行操作。这意味着可以使用屏蔽技术获得整数中的各个位(??)位运算是针对整数的二进制进行的位移操作整数 32位 , 正数符号为0,负数符号为1。十进制转二进制 不足32位的,最高位补符号位,其余补零在Java中,整数的二进制是以补码的形式存在的位运算计算完,还是补码的形式,要转成原码,再得出十进制值正数:原码=反码=补码 负数...原创 2020-03-04 22:25:17 · 766 阅读 · 0 评论 -
(Java版)算法——对数器的使用(验证算法的正确性)
对数器的使用(验证算法的正确性)背景一般很多的练习算法的平台都可以对写出的算法进行测试,但是如果算法不知道在哪里测试,或者在参加竞赛时不知道写的算法的正确性,这是可以使用对数器来验证算法的正确性。对数器的使用步骤准备预测定的方法(算法)a实现一个绝对正确但复杂度不好的方法b(保证方法b的正确性,很多时候使用系统提供的方法)实现一个随机样本生成器实现对比的方法(可以对比方法a和方法b...原创 2020-02-26 11:53:14 · 453 阅读 · 0 评论 -
(Java版)算法——交换两个基本数据类型的变量值和数组中元素调换位置
冒泡排序复杂度分析时间复杂度O(N^2), 额外空间复杂度O(1)算法原理分析两次循环。第一次循环,从末尾开始,每次-1(每循环一次,最大的数排到末尾);第二次循环,循环到数组的索引对象,如果比右边数组对象大,交换位置,否则继续循环代码public class BubbleSort { /** * 功能描述: 冒泡排序算法 */ public static void bu...原创 2020-02-26 09:53:21 · 1017 阅读 · 0 评论