![](https://img-blog.csdnimg.cn/97c4a9553f8f46f5be62677f6231624b.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 91
数据结构与算法
你去把唐僧使徒除掉
这个作者很懒,什么都没留下…
展开
-
JDK8优先级队列/小根堆PriorityQueue源码分析及Top-K问题解决方案
目录1. 查看``PriorityQueue``2. 找到``new PriorityQueue``, 也就是初始化的时候代码3. 查看 this4. 如何建立小根堆4.1 offer分析4.1.1 队列扩容4.1.1.1 扩容实现4.1.1.2 考虑扩容溢出4.1.2 调整为小根堆4.2 poll分析public class main { public static void main(String[] args) { PriorityQueue<Integer> m原创 2021-12-08 23:59:02 · 545 阅读 · 1 评论 -
带你揭开JDK8哈希源码面纱
目录原创 2021-12-22 15:32:17 · 951 阅读 · 0 评论 -
数据结构基础概念
1.基本概念和术语1.数据描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据不仅包括编程中基础的整形,实型等数值类型还包括声音,图像,视频等非数值类型。关键字:①输入到计算机中②能被计算机程序处理2. 数据元素组成数据的,有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。举例:①人类中,数据元素就是人②畜类中,数据元素就是猫,狗,马,牛,羊等动物3.数据项一个数据元素可以有若干个数据项组成。数据项是数据不可分割的最小单位。但原创 2021-01-28 21:32:17 · 486 阅读 · 0 评论 -
Java数组2[逆序,数组内部元素奇偶排列,判断升序,二分查找,拷贝,冒泡排序与优化]
举栗子/** * 数组拷贝共有 4 种方式 * for * Arrays.copyOf(src) * System.arraycopy(src, srcPos, dst, dstPos, len); * arr.clone(src);克隆产副本,是Object的克隆方法 * 1.System.arraycopy()速度最快,属于与natve方法[C,C++代码实现] * 2.以上4种全是浅拷贝:牵一发动全身 * *原创 2020-12-31 23:36:09 · 223 阅读 · 0 评论 -
Java汉诺塔,青蛙跳台阶及数组初识
汉诺塔:汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘斜体样式A柱全部移交至C,B相当于中间者的思维步骤分析圆盘数步骤经过步数累计1A->C2^-1=12A->B;A->C;B->C2^2-1=3原创 2020-12-30 14:29:25 · 323 阅读 · 0 评论 -
Java简单易懂线性表之泛型顺序表实现
1.线性表的定义线性表,从名字上你就能感觉到,是具有像线 样的性质的表。线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储这里需要强调几个关键的地方:首先它是一个 序列 也就是说,元素之间是有顺序的,若元素存在多个,则第 一个 元素无前驱,最后一个元素无原创 2021-08-30 15:05:35 · 815 阅读 · 3 评论 -
二分查找为什么总写错?
二分查找:是在某一特定有序数组中查找指定数字的一种算法如下查找数字:5的步骤{0, 1, 2, 3, 4, 5, 6, 7, 8}第一步折半查找结果:中间下标是4,结果是4第二次折半查找结果:中间下标是6,结果是6第三次折半查找结果:中间下标是5,结果是5相信这是都知道的一个步骤和思路,但是小细节问题就出现在边界条件和更新左右指针1.举例1 2 3 5 5 5 8 9找到第一个">=5"的元素【三个5中第一个5】找到第一个"<5"的元素【三个5中第一个5的前一个元素原创 2021-09-22 00:48:47 · 384 阅读 · 0 评论 -
Java简单带你手把手实现双链表
1.创建NodeDouble类原创 2021-09-08 15:09:35 · 374 阅读 · 1 评论 -
Java栈,队列和循环队列的实现
1. 栈1.1 概念一种特殊的线性表,说明了具有前驱和后继关系。只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除的一端称为栈顶,另一端称为栈底。栈中的数据元素遵循后进先出 LIFO 原则【Last In First Out】压栈:栈的插入/进栈/压栈,入数据在栈顶出栈:栈的删除操作叫做出栈,出数据也在栈顶后进先出【类似于浏览器的回退,只会返回上一个浏览后的页面而不是返回第一个打开的页面;弹夹中的子弹】邪恶的小技巧:合理的出栈顺序(画栈图)已知一个栈的入栈序列是m, n, x,原创 2021-10-04 18:16:16 · 634 阅读 · 4 评论 -
链表经典面试题
删除链表中等于给定值 val 的所有节点 public ListNode removeElements(ListNode head, int val) { if(head == null){ return null; }else{ ListNode cur = head; ListNode prev = head; while(cur!=null){ .原创 2021-09-07 19:08:16 · 393 阅读 · 0 评论 -
Java简单易懂线性表之泛型单链表实现
1. 顺序存储结构不足的解决办法上一篇博客中说的是线性表的 顺序存储结构。它是有缺点的,最大的缺点就是插入和删除时需要移动大量元素,这显然就需要耗费时间。能不能想办法解决呢?要解决这个问题,我们就得考虑一下 致这个问题的原因。相邻两元素的存储位置也具有邻居关系。他们的编号是0, 1, 2, 3…, n。他们在内存中的位置也是紧挨着的,中间没有空隙,当然也就无法快速介入,而删除后,当中就会留出空隙,自然也就需要弥补。单链表思路我们反正也是要让相邻元素间留有足够余地,那干脆所有的元素都不要考虑相原创 2021-09-01 09:05:34 · 474 阅读 · 0 评论 -
Java常用List的总结和其add方法源码解析为何数组1.5倍扩容
1. 集合类体系2. 常见方法List 线性表方法解释boolean add(E e)尾插evoid add(int index, E e)将 e 插入到 index 位置boolean addAll(Collection<? extends E> c)尾插 e 的元素E remove(int index)删除 index 位置元素boolean remove(Object o)删除遇到的第一个 oE get(int inde原创 2021-10-03 08:51:25 · 2205 阅读 · 3 评论 -
括号匹配,栈实现队列,队列实现栈,最小栈,循环队列
1.括号匹配问题OJ2.用队列实现栈OJ3.用栈实现队列OJ4.实现一个最小栈OJ5. 设计循环队列OJ原创 2021-10-10 16:58:28 · 233 阅读 · 0 评论 -
通俗易懂深入理解八大排序
目录1. 开场白2. 排序的基本概念与分类2.1 排序稳定性2.2 内排序与外排序2.3 分类3.排序算法实现3.1. 冒泡排序3.2.选择排序3.3. 插入排序3.4. 希尔排序3.4.1 希尔排序原理3.4.2 希尔排序算法实现3.4.3 希尔排序复杂度分析3.5. 堆排序3.5.1 堆排序原理3.5.2 堆排序算法实现3.5.2 堆排序复杂度分析3.6. 归并排序3.5.1 递归实现归并排序3.5. 非递归实现归并排序3.5. 归并排序复杂度分析3.7. 快速排序3.7.1 快速排序算法基本思想3.7原创 2021-11-26 12:50:51 · 1053 阅读 · 5 评论 -
当初我要是这么学习二叉树就好了「附图文解析」
java二叉树代码实现和图文解析原创 2021-11-22 02:20:39 · 1356 阅读 · 7 评论 -
通俗易懂的KMP算法「附图文解析」
通过BF暴力算法写出最简单的KMP算法原创 2022-05-05 09:50:07 · 2294 阅读 · 1 评论 -
高阶查找算法第一篇
二分法查找,顺序表查找优化,线性索引查找,哈希表设计,,斐波那契查找,二叉树搜索,位图,布隆过滤器,LRUCache原创 2022-10-25 23:44:43 · 835 阅读 · 0 评论 -
高阶查找算法第二篇
AVL树,红黑树,B-树,图原创 2022-10-26 00:49:56 · 470 阅读 · 0 评论