算法与数据结构
文章平均质量分 75
tinyvampirepudge
这个作者很懒,什么都没留下…
展开
-
剑指offer第二版Java代码,参考对应的LeetCode题目
剑指offer第二版Java代码,参考对应的LeetCode题目历时一个多月,终于把剑指offer第二版刷完了,这里把项目贡献出来。项目地址:tinyvampirepudge/LeetCodeTest,具体代码请看targetoffer目录。具体来说有如下几个特点:1、完整的完成剑指offer上所有的题目,从第3题到第68题。2、尽可能的将题目与LeetCode上的题目对应起来。3、每个题目均附有完整的测试用例。4、针对剑指offer上的题目变形和附加题,也一一做了解答。5、对某些原创 2020-10-21 17:25:24 · 603 阅读 · 3 评论 -
LinkedHashMap源码简读
LinkedHashMap1、LinkedHashMap继承自HashMap,HashMap具有的特性它都具有。2、实际上,LinkedHashMap是通过双向链表和散列表这两种数据组合实现的。LinkedHashMap中的“Linked”实际上指的是双向链表,并非指“用链表法解决散列冲突”。3、LinkedHashMap不仅支持按照插入顺序遍历数据,还支持按照访问顺序来遍历数据。通过设置a...原创 2018-12-17 18:50:16 · 473 阅读 · 1 评论 -
HashMap 1.8 源码简读
HashMap 1.8 源码简读初始大小:默认为16/** * The default initial capacity - MUST be a power of two. */static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16如果指定了大小,则会在初始化的时候将初始容量大小设置为大于等于指定初始值、...原创 2018-12-14 15:26:01 · 559 阅读 · 1 评论 -
Java实现二分查找
Java实现二分查找二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0。这里我们实现最简单情况下的二分查找。升序排列的数组,无重复元素,查找其中是否包含单个元素。非递归方式实现: /** * 二分查找,针对不存在重复元素的。非递归实现。 * * ...原创 2018-11-24 11:11:27 · 760 阅读 · 0 评论 -
Java代码实现快速排序(QuickSort)
Java代码实现快速排序(QuickSort)核心思想如果要排序数组中下标从p到r之间的一组数据,我们选择p到r之间的任意一个数据为pivot(分区点)。我们遍历p到r之间的数据,将小于pivot的放到左边,将大于pivot的放到右边,将pivot放到中间。经过这一步骤之后,数组p到r之间的数据就被分成了三个部分,前面p到q-1之间都是小于pivot的,中间是pivot,后面的q=1到r之间...原创 2018-11-14 09:27:45 · 2283 阅读 · 1 评论 -
Java代码实现归并排序
Java代码实现归并排序归并排序(Merge Sort)思路:如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。所以说归并排序的核心思想是排序和合并两个有序数组,这个规程需要用递归来实现。核心思想:将数组拆分为两个数组,然后对两个数组各自进行排序。合并两个排好序的数组。需要注意的是,对子数组进行排...原创 2018-11-13 17:46:52 · 2083 阅读 · 0 评论 -
冒泡排序、插入排序、选择排序
冒泡排序、插入排序、选择排序冒泡排序(Bubble Sort)冒泡排序只会操作相邻的两个数据。两两比较,将较大的数换到后边。代码如下: /** * 冒泡排序 * 两两比较,将较大的数移到后边。 * * @param a * @param n */ public void bubbleSort(int[] a, int...原创 2018-11-01 20:07:51 · 452 阅读 · 0 评论 -
求单向链表的中间结点
求单向链表的中间结点需求非空的单向链表,返回其中间节点。如果有两个中间结点,返回第二个。链表大小控制在1~100之间。示例1:Input: [1,2,3,4,5]Output: Node 3 from this list (Serialization: [3,4,5])示例2:Input: [1,2,3,4,5,6]Output: Node 4 from this list (...原创 2018-10-27 17:57:38 · 1134 阅读 · 0 评论 -
删除链表倒数第 n 个结点
Java代码实现:删除链表倒数第 n 个结点问题描述:给你一个单向链表,删除链表倒数第n个结点,然后返回head结点。这里的数字n是有效数字。Given linked list: 1->2->3->4->5, and n = 2.移除倒数第二个结点之后: 1->2->3->5.方法一:先遍历获取链表长度,接着获取要移除的前一个元素,修改该元素...原创 2018-10-27 17:15:50 · 780 阅读 · 0 评论 -
Java实现两个有序的链表合并
Java实现两个有序的链表合并先实现两个有序链表代码如下: SingleLinkedList sll1 = new SingleLinkedList(); for (int i = 0; i < 10; i += 2) { SingleNode node = new SingleNode(i, null); ...原创 2018-10-27 15:11:03 · 2845 阅读 · 2 评论 -
使用Java实现单向链表,并完成链表反转。
使用Java实现单向链表,并完成链表反转。算法和数据结构是程序员逃不过的一个坎,所以趁着闲余时间,开始学习基础的算法和数据结构。这里记录下自己实现简单的单项链表的过程,如有错误,敬请指正。明确需求在Java中,常用的数据容器里面,跟链表关系紧密的当属LinkedList了,它的底层实现为双向链表,这里就以它为参照物,实现自己的简单的单向链表。另外,还需要支持增删改查、获取大小等功能。如下所...原创 2018-10-26 21:30:07 · 2593 阅读 · 2 评论 -
Java实现队列——顺序队列、链式队列
Java实现队列——顺序队列、链式队列概念先进者先出,这就是典型的“队列”。(First In, First Out,FIFO)。我们知道,栈只支持两个基本操作:入栈push()和出栈pop()。队列跟栈非常相似,支持的操作也很有限,最基本的操作也是两个:入队和出队。入队 enqueue(),让一个数据到队列尾部;出队 dequeue(),从队列头部取一个元素。所以,队列跟栈一样,也是一...原创 2018-10-29 17:17:23 · 7345 阅读 · 3 评论 -
Java代码实现顺序栈和链式栈
Java代码实现顺序栈和链式栈栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入或者删除运算。后进先出(Last In First Out)。栈中的数据操作主要有push(压入)和pop(弹出)操作。实际上,栈就可以用数组来实现,也可以用链表来实现。用数组实现的叫做顺序栈,用链表实现的叫做链式栈。为了简单起见,我们的栈不支持泛型。顺序栈public c...原创 2018-10-29 14:53:09 · 2634 阅读 · 0 评论