<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[cedarjo的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/cedarjo</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; cedarjo]]></copyright><item><title><![CDATA[图（JAVA）]]></title><link>https://blog.youkuaiyun.com/cedarjo/article/details/91353470</link><guid>https://blog.youkuaiyun.com/cedarjo/article/details/91353470</guid><author>cedarjo</author><pubDate>Sun, 09 Jun 2019 15:31:59 +0800</pubDate><description><![CDATA[无权图
import java.util.Iterator;

public interface Graph {

    /**
     * 返回顶点数
     * @return
     */
    int pointCount();

    /**
     * 返回边数
     * @return
     */
    int edgeCount();

    /**
  ...]]></description><category></category></item><item><title><![CDATA[并查集（JAVA）]]></title><link>https://blog.youkuaiyun.com/cedarjo/article/details/91352345</link><guid>https://blog.youkuaiyun.com/cedarjo/article/details/91352345</guid><author>cedarjo</author><pubDate>Sun, 09 Jun 2019 13:27:16 +0800</pubDate><description><![CDATA[并查集接口
/**
 * 并查集
 */
public interface UnionFind {

    /**
     * 所有节点数量
     * @return
     */
    int count();

    /**
     * 将a和b合并
     * @param a
     * @param b
     */
    void union(int a, in...]]></description><category></category></item><item><title><![CDATA[索引堆（JAVA）]]></title><link>https://blog.youkuaiyun.com/cedarjo/article/details/90764897</link><guid>https://blog.youkuaiyun.com/cedarjo/article/details/90764897</guid><author>cedarjo</author><pubDate>Tue, 04 Jun 2019 10:52:22 +0800</pubDate><description><![CDATA[import java.util.Comparator;
import java.util.LinkedList;
import java.util.Objects;
import java.util.Queue;

public class IndexHeap&lt;E&gt; {

    /**
     * demo
     * 某最大堆
     * ********* Z
     ...]]></description><category></category></item><item><title><![CDATA[集合（JAVA）]]></title><link>https://blog.youkuaiyun.com/cedarjo/article/details/89813388</link><guid>https://blog.youkuaiyun.com/cedarjo/article/details/89813388</guid><author>cedarjo</author><pubDate>Sat, 04 May 2019 14:36:29 +0800</pubDate><description><![CDATA[集合是一种元素不重复的容器
/**
 * 集合的主要特点：元素不重复
 * @param &lt;E&gt;
 */
public interface Set&lt;E&gt; {

    /**
     * 添加
     * @param e
     */
    void add(E e);

    /**
     * 判断是否存在
     * @param e
     * @...]]></description><category></category></item><item><title><![CDATA[二分搜索树（JAVA）]]></title><link>https://blog.youkuaiyun.com/cedarjo/article/details/89380828</link><guid>https://blog.youkuaiyun.com/cedarjo/article/details/89380828</guid><author>cedarjo</author><pubDate>Thu, 18 Apr 2019 15:57:26 +0800</pubDate><description><![CDATA[先放代码
public class BST&lt;E extends Comparable&lt;E&gt;&gt; {

    private class Node&lt;E&gt; {
        public E val;
        public Node&lt;E&gt; left, right;

        public Node(E e) {
            ...]]></description><category></category></item><item><title><![CDATA[二叉树以及前序、中序、后序、层序遍历（JAVA）]]></title><link>https://blog.youkuaiyun.com/cedarjo/article/details/88982277</link><guid>https://blog.youkuaiyun.com/cedarjo/article/details/88982277</guid><author>cedarjo</author><pubDate>Tue, 02 Apr 2019 21:47:03 +0800</pubDate><description><![CDATA[基于数组实现的二叉树叫顺序二叉树
基于链表实现的二叉树叫链式二叉树
顺序二叉树

根节点存储在index = 1
某节点存储在index = i，那么其左子节点将存储在index = 2*i，其右子节点将存储在index = 2*i + 1，其父节点将存储在index = i/2

链式二叉树
定义节点
public class TreeNode&lt;T&gt; {

    private T...]]></description><category></category></item><item><title><![CDATA[二分查找（JAVA）]]></title><link>https://blog.youkuaiyun.com/cedarjo/article/details/88971505</link><guid>https://blog.youkuaiyun.com/cedarjo/article/details/88971505</guid><author>cedarjo</author><pubDate>Tue, 02 Apr 2019 14:31:56 +0800</pubDate><description><![CDATA[二分查找

]]></description><category></category></item><item><title><![CDATA[排序漏掉的知识（JAVA）]]></title><link>https://blog.youkuaiyun.com/cedarjo/article/details/88774844</link><guid>https://blog.youkuaiyun.com/cedarjo/article/details/88774844</guid><author>cedarjo</author><pubDate>Sun, 24 Mar 2019 11:25:33 +0800</pubDate><description><![CDATA[原地排序算法
原地排序是针对排序的空间复杂度而言的。从前边的若干排序算法中可以看出，排序过程中需要借助于一些局部变量暂存数据，或用于比较，或用于交换，或用于存储当前排序结果集。

比如选择排序，每轮需要一个局部变量暂存最大/小值，一个局部变量暂存最大/小值的索引；
比如冒泡排序，每轮需要一个局部变量用于交换（当然针对int的交换也可以用比较骚气的操作不使用额外变量）；
比如插入排序，每轮需要一个局...]]></description><category></category></item><item><title><![CDATA[排序性能测试（JAVA）]]></title><link>https://blog.youkuaiyun.com/cedarjo/article/details/88725268</link><guid>https://blog.youkuaiyun.com/cedarjo/article/details/88725268</guid><author>cedarjo</author><pubDate>Fri, 22 Mar 2019 22:22:36 +0800</pubDate><description><![CDATA[生成测试用数据
@Test
public void generatePhoneNum() throws Exception {
    generatePhoneNum(50000);
    generatePhoneNum(100000);
    generatePhoneNum(150000);
    generatePhoneNum(200000);
    generatePhone...]]></description><category></category></item><item><title><![CDATA[时间复杂度为O(n)的排序（JAVA）]]></title><link>https://blog.youkuaiyun.com/cedarjo/article/details/88724011</link><guid>https://blog.youkuaiyun.com/cedarjo/article/details/88724011</guid><author>cedarjo</author><pubDate>Thu, 21 Mar 2019 19:44:04 +0800</pubDate><description><![CDATA[时间复杂度为O(n)的排序
桶排序
计数排序
基数排序

]]></description><category></category></item><item><title><![CDATA[时间复杂度为O(nlogn)的排序（JAVA）]]></title><link>https://blog.youkuaiyun.com/cedarjo/article/details/88723985</link><guid>https://blog.youkuaiyun.com/cedarjo/article/details/88723985</guid><author>cedarjo</author><pubDate>Thu, 21 Mar 2019 19:42:40 +0800</pubDate><description><![CDATA[时间复杂度为O(nlogn)的排序
归并排序
思路
一个数组，前后一分为二，只要把两个数组都排好序，最后将两个数组合并到一起，就完成了整个数组的排序。
这种解决问题的思想叫“分治”，解决一个大问题的途径是通过解决若干个小问题来完成的。
举个例子，有数组[4,6,2,8,1]
前后一分为二：[4,6,2]，[8,1]
需要分别完成上述两个数组的排序后，最终合并两数组
完成[4,6,2]的排序是接着一...]]></description><category></category></item><item><title><![CDATA[时间复杂度为O(n2)的排序（JAVA）]]></title><link>https://blog.youkuaiyun.com/cedarjo/article/details/88723929</link><guid>https://blog.youkuaiyun.com/cedarjo/article/details/88723929</guid><author>cedarjo</author><pubDate>Thu, 21 Mar 2019 19:40:32 +0800</pubDate><description><![CDATA[时间复杂度为O(n2)的排序
选择排序
思路
选择排序作为不站在巨人肩膀上可以想到的一种排序算法，其思路相对简单而纯粹。
比如现在要对一个数组做升序排序，那么，找到里边的最小值，放到第一位；找到第二小值，放到第二位；…找到里边的最大值，放到最后一位
而具体到数组中：
从index=0开始向后遍历找最小值，找到最小值后，记录下它的索引值，比如是index=m，然后将index=0和index=m的元...]]></description><category></category></item><item><title><![CDATA[数组排序（JAVA）]]></title><link>https://blog.youkuaiyun.com/cedarjo/article/details/88649094</link><guid>https://blog.youkuaiyun.com/cedarjo/article/details/88649094</guid><author>cedarjo</author><pubDate>Tue, 19 Mar 2019 00:19:30 +0800</pubDate><description><![CDATA[下边的诸多排序中，选择排序应该是自己琢磨琢磨还能想到的排序算法了。
其实像1+2+3+...+100，使用了取巧的方式(a1+an)*n/2，别以为真的是自己一下子就想到的，如果没学或者没人点拨一下的话，很可能需要想很久才能想到这个招数。也并不用为此感到难过，要学会站在巨人的肩膀上才是正解，比如现在就知道了这种解法来计算这种求和。
选择排序算是不站在巨人肩膀上，可以想到的一种排序算法。
时间复杂度...]]></description><category></category></item><item><title><![CDATA[链式队列（JAVA）]]></title><link>https://blog.youkuaiyun.com/cedarjo/article/details/88600670</link><guid>https://blog.youkuaiyun.com/cedarjo/article/details/88600670</guid><author>cedarjo</author><pubDate>Sat, 16 Mar 2019 16:36:46 +0800</pubDate><description><![CDATA[链式队列就是基于单链表实现的队列

]]></description><category></category></item><item><title><![CDATA[顺序队列（JAVA）]]></title><link>https://blog.youkuaiyun.com/cedarjo/article/details/88600638</link><guid>https://blog.youkuaiyun.com/cedarjo/article/details/88600638</guid><author>cedarjo</author><pubDate>Sat, 16 Mar 2019 16:35:47 +0800</pubDate><description><![CDATA[顺序队列就是基于数组实现的队列

]]></description><category></category></item><item><title><![CDATA[链式栈（JAVA）]]></title><link>https://blog.youkuaiyun.com/cedarjo/article/details/88598608</link><guid>https://blog.youkuaiyun.com/cedarjo/article/details/88598608</guid><author>cedarjo</author><pubDate>Sat, 16 Mar 2019 15:13:36 +0800</pubDate><description><![CDATA[链式栈就是基于单链表的栈
单链表的代码
主类和[单链表反转（JAVA）]一致(https://blog.youkuaiyun.com/cedarjo/article/details/88421448)
这里把代码再放一边，主要区别是把node单列出来，以及在单链表主类中加入了从头从尾的增删节点代码
SinglyLinkedNode
public class SinglyLinkedNode&amp;amp;amp;lt;T&amp;amp;amp;gt; ...]]></description><category></category></item><item><title><![CDATA[顺序栈（JAVA）]]></title><link>https://blog.youkuaiyun.com/cedarjo/article/details/88598300</link><guid>https://blog.youkuaiyun.com/cedarjo/article/details/88598300</guid><author>cedarjo</author><pubDate>Sat, 16 Mar 2019 15:00:03 +0800</pubDate><description><![CDATA[顺序栈就是给予数组的栈
import java.util.Arrays;

public class ArrayStack&amp;amp;amp;amp;lt;T&amp;amp;amp;amp;gt; {

    private T[] array;

    private int arrayLength;

    private int stackSize;

    public ArrayStack(int length) {
        ...]]></description><category></category></item><item><title><![CDATA[求单链表的中间节点（JAVA）]]></title><link>https://blog.youkuaiyun.com/cedarjo/article/details/88557267</link><guid>https://blog.youkuaiyun.com/cedarjo/article/details/88557267</guid><author>cedarjo</author><pubDate>Thu, 14 Mar 2019 17:22:23 +0800</pubDate><description><![CDATA[单链表主类
参考单链表反转中的主类代码
求中间节点的思路
参考删除单链表中倒数第n个节点（JAVA）中，如果有size字段，中间节点的求法就是
size/2（如果有两个中间节点，取前边）
size/2 + 1（如果有两个中间节点，取后边）
接着就是移动到相应位置即可
参考单链表中环的检测（JAVA）中，快慢指针的思路，二倍速的快指针走到头的时候，一倍速的慢指针就正好在中间节点了，如果有两个中间节点...]]></description><category></category></item><item><title><![CDATA[删除单链表中倒数第n个节点（JAVA）]]></title><link>https://blog.youkuaiyun.com/cedarjo/article/details/88556280</link><guid>https://blog.youkuaiyun.com/cedarjo/article/details/88556280</guid><author>cedarjo</author><pubDate>Thu, 14 Mar 2019 16:47:42 +0800</pubDate><description><![CDATA[单链表主类
参考单链表反转中的主类代码
思路
链表中有字段size是节点总个数
倒数第lastNum个节点就是正数第size-lastNum+1个节点，index=size-lastNum
删除操作需要拿到倒数第lastNum+1个节点来完成，即正数第size-lastNum个节点，index=size-lastNum-1
把该节点的next设置为该节点的next.next即可
代码
public...]]></description><category></category></item><item><title><![CDATA[两个有序链表的合并（JAVA）]]></title><link>https://blog.youkuaiyun.com/cedarjo/article/details/88551181</link><guid>https://blog.youkuaiyun.com/cedarjo/article/details/88551181</guid><author>cedarjo</author><pubDate>Thu, 14 Mar 2019 14:34:29 +0800</pubDate><description><![CDATA[单链表主类
参考单链表反转中的主类代码
有序链表合并思路
原链表m和n都是有序的，比如都是正序排列（从小到大）
两个链表同时从头开始向后移动
移动前先比较节点大小，更小的存入新链表的链尾（此为中间步骤）

直到有一个链表移动结束，再将另一个链表的剩余部分追加到新链表的链尾。
代码
public SinglyLinkedList&amp;amp;lt;T&amp;amp;gt; mergeSorted(SinglyLinkedLi...]]></description><category></category></item></channel></rss>