- 博客(22)
- 收藏
- 关注
原创 图(JAVA)
无权图import java.util.Iterator;public interface Graph { /** * 返回顶点数 * @return */ int pointCount(); /** * 返回边数 * @return */ int edgeCount(); /** ...
2019-06-09 15:31:59 224
原创 并查集(JAVA)
并查集接口/** * 并查集 */public interface UnionFind { /** * 所有节点数量 * @return */ int count(); /** * 将a和b合并 * @param a * @param b */ void union(int a, in...
2019-06-09 13:27:16 185
原创 索引堆(JAVA)
import java.util.Comparator;import java.util.LinkedList;import java.util.Objects;import java.util.Queue;public class IndexHeap<E> { /** * demo * 某最大堆 * ********* Z ...
2019-06-04 10:52:22 301
原创 集合(JAVA)
集合是一种元素不重复的容器/** * 集合的主要特点:元素不重复 * @param <E> */public interface Set<E> { /** * 添加 * @param e */ void add(E e); /** * 判断是否存在 * @param e * @...
2019-05-04 14:36:29 137
原创 二分搜索树(JAVA)
先放代码public class BST<E extends Comparable<E>> { private class Node<E> { public E val; public Node<E> left, right; public Node(E e) { ...
2019-04-18 15:57:26 333
原创 二叉树以及前序、中序、后序、层序遍历(JAVA)
基于数组实现的二叉树叫顺序二叉树基于链表实现的二叉树叫链式二叉树顺序二叉树根节点存储在index = 1某节点存储在index = i,那么其左子节点将存储在index = 2*i,其右子节点将存储在index = 2*i + 1,其父节点将存储在index = i/2链式二叉树定义节点public class TreeNode<T> { private T...
2019-04-02 21:47:03 314
原创 排序漏掉的知识(JAVA)
原地排序算法原地排序是针对排序的空间复杂度而言的。从前边的若干排序算法中可以看出,排序过程中需要借助于一些局部变量暂存数据,或用于比较,或用于交换,或用于存储当前排序结果集。比如选择排序,每轮需要一个局部变量暂存最大/小值,一个局部变量暂存最大/小值的索引;比如冒泡排序,每轮需要一个局部变量用于交换(当然针对int的交换也可以用比较骚气的操作不使用额外变量);比如插入排序,每轮需要一个局...
2019-03-24 11:25:33 176
原创 排序性能测试(JAVA)
生成测试用数据@Testpublic void generatePhoneNum() throws Exception { generatePhoneNum(50000); generatePhoneNum(100000); generatePhoneNum(150000); generatePhoneNum(200000); generatePhone...
2019-03-22 22:22:36 299
原创 时间复杂度为O(nlogn)的排序(JAVA)
时间复杂度为O(nlogn)的排序归并排序思路一个数组,前后一分为二,只要把两个数组都排好序,最后将两个数组合并到一起,就完成了整个数组的排序。这种解决问题的思想叫“分治”,解决一个大问题的途径是通过解决若干个小问题来完成的。举个例子,有数组[4,6,2,8,1]前后一分为二:[4,6,2],[8,1]需要分别完成上述两个数组的排序后,最终合并两数组完成[4,6,2]的排序是接着一...
2019-03-21 19:42:40 4861
原创 时间复杂度为O(n2)的排序(JAVA)
时间复杂度为O(n2)的排序选择排序思路选择排序作为不站在巨人肩膀上可以想到的一种排序算法,其思路相对简单而纯粹。比如现在要对一个数组做升序排序,那么,找到里边的最小值,放到第一位;找到第二小值,放到第二位;…找到里边的最大值,放到最后一位而具体到数组中:从index=0开始向后遍历找最小值,找到最小值后,记录下它的索引值,比如是index=m,然后将index=0和index=m的元...
2019-03-21 19:40:32 804
原创 数组排序(JAVA)
下边的诸多排序中,选择排序应该是自己琢磨琢磨还能想到的排序算法了。其实像1+2+3+...+100,使用了取巧的方式(a1+an)*n/2,别以为真的是自己一下子就想到的,如果没学或者没人点拨一下的话,很可能需要想很久才能想到这个招数。也并不用为此感到难过,要学会站在巨人的肩膀上才是正解,比如现在就知道了这种解法来计算这种求和。选择排序算是不站在巨人肩膀上,可以想到的一种排序算法。时间复杂度...
2019-03-19 00:19:30 121
原创 链式栈(JAVA)
链式栈就是基于单链表的栈单链表的代码主类和[单链表反转(JAVA)]一致(https://blog.csdn.net/cedarjo/article/details/88421448)这里把代码再放一边,主要区别是把node单列出来,以及在单链表主类中加入了从头从尾的增删节点代码SinglyLinkedNodepublic class SinglyLinkedNode&amp;lt;T&amp;gt; ...
2019-03-16 15:13:36 606
原创 顺序栈(JAVA)
顺序栈就是给予数组的栈import java.util.Arrays;public class ArrayStack&amp;amp;lt;T&amp;amp;gt; { private T[] array; private int arrayLength; private int stackSize; public ArrayStack(int length) { ...
2019-03-16 15:00:03 222
原创 求单链表的中间节点(JAVA)
单链表主类参考单链表反转中的主类代码求中间节点的思路参考删除单链表中倒数第n个节点(JAVA)中,如果有size字段,中间节点的求法就是size/2(如果有两个中间节点,取前边)size/2 + 1(如果有两个中间节点,取后边)接着就是移动到相应位置即可参考单链表中环的检测(JAVA)中,快慢指针的思路,二倍速的快指针走到头的时候,一倍速的慢指针就正好在中间节点了,如果有两个中间节点...
2019-03-14 17:22:23 1306
原创 删除单链表中倒数第n个节点(JAVA)
单链表主类参考单链表反转中的主类代码思路链表中有字段size是节点总个数倒数第lastNum个节点就是正数第size-lastNum+1个节点,index=size-lastNum删除操作需要拿到倒数第lastNum+1个节点来完成,即正数第size-lastNum个节点,index=size-lastNum-1把该节点的next设置为该节点的next.next即可代码public...
2019-03-14 16:47:42 1059
原创 两个有序链表的合并(JAVA)
单链表主类参考单链表反转中的主类代码有序链表合并思路原链表m和n都是有序的,比如都是正序排列(从小到大)两个链表同时从头开始向后移动移动前先比较节点大小,更小的存入新链表的链尾(此为中间步骤)直到有一个链表移动结束,再将另一个链表的剩余部分追加到新链表的链尾。代码public SinglyLinkedList&lt;T&gt; mergeSorted(SinglyLinkedLi...
2019-03-14 14:34:29 4009 1
原创 单链表中环的检测(JAVA)
单链表主类参考单链表反转中的主类代码检测思路假设一个单链表是环形链表,那么该链表的元素总数可分为两部分size = m + n其中m是直线部分,n是环形部分假想这是一个跑道,从直线跑道为起点,之后进入环形跑道,然后一直绕着环形跑道跑现在有两个人一起从起点出发,速度不一致,快的速度为v,慢的速度为w,有v&amp;amp;gt;w&amp;amp;gt;0假设两人足够有力量跑下去,那么这两人会不会在环形跑道的某点相...
2019-03-12 20:15:16 642
原创 单链表反转(JAVA)
单链表主类public class SinglyLinkedList&amp;lt;T&amp;gt; { private SinglyLinkedNode&amp;lt;T&amp;gt; header; private int size; private static final int MAX = 5; public SinglyLinkedNode&amp;lt;T&am
2019-03-12 15:28:30 800 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人