<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[跨世纪逃兵的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ujn11456963</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ujn11456963]]></copyright><item><title><![CDATA[快速排序简述]]></title><link>https://blog.youkuaiyun.com/ujn11456963/article/details/89313095</link><guid>https://blog.youkuaiyun.com/ujn11456963/article/details/89313095</guid><author>ujn11456963</author><pubDate>Mon, 15 Apr 2019 15:38:13 +0800</pubDate><description><![CDATA[快排是不稳定的排序。

复杂度介于nlogn ～n*n 之间（均摊nlogn）。

当每次取值恰好能取到中位数时，复杂度最小，即为n*logn。

当每次取值取到极值时，当待排序数据的重复性很高时，时间复杂度最大，即为n*n

对于无序数据，快排均摊复杂度为n*logn 且常数系数很小，为八大排序中最快。

快排的特性就是快。




//能处理重复数据的快速排序
pair&lt;int,int...]]></description><category></category></item><item><title><![CDATA[虚拟内存简述]]></title><link>https://blog.youkuaiyun.com/ujn11456963/article/details/88889157</link><guid>https://blog.youkuaiyun.com/ujn11456963/article/details/88889157</guid><author>ujn11456963</author><pubDate>Mon, 01 Apr 2019 11:02:32 +0800</pubDate><description><![CDATA[在远古时期，内存极小，程序也不大，程序直接装载到内存运行。但是随着程序越来越复杂，理所应当的出现了这个问题，

如果程序所需内存比可用内存大，程序该如何运行？

为了解决这个问题，当时提出了一种覆盖装入的技术，就是需要程序员自己把程序分割成若干个不相干的程序块，块与块之间分别装载运行。举个很简单的例子，程序里面有两个主要函数A和B，这两个函数之间没有相互调用关系，当需要A函数运行的时候，就把A函数...]]></description><category></category></item><item><title><![CDATA[面试常见排序算法实现]]></title><link>https://blog.youkuaiyun.com/ujn11456963/article/details/88870709</link><guid>https://blog.youkuaiyun.com/ujn11456963/article/details/88870709</guid><author>ujn11456963</author><pubDate>Thu, 28 Mar 2019 16:30:41 +0800</pubDate><description><![CDATA[1.快速排序


//快速排序
void quick_sort(vector&lt;int&gt; &amp;nums)
{
    quick_sort(nums,0,nums.size()-1);
    return;
}

void quick_sort(vector&lt;int&gt; &amp;nums,int start,int end)
{
    //元素&lt;=1个退出
 ...]]></description><category></category></item><item><title><![CDATA[堆之二项堆]]></title><link>https://blog.youkuaiyun.com/ujn11456963/article/details/87922871</link><guid>https://blog.youkuaiyun.com/ujn11456963/article/details/87922871</guid><author>ujn11456963</author><pubDate>Mon, 25 Feb 2019 20:02:57 +0800</pubDate><description><![CDATA[二项堆：不同度二项树的根结点从小到大链起来就是二项堆

二项树：

如图所示，4颗树分别为度为0，1，2，3的二项树

度为3的二项树：有一个根结点，（0，1，2）的二项树分别是它的叶子节点。

度为n的二项树：有一个根节点，（0，1...n-1)的二项树分别是它的叶子节点



同度二项树合并：

直接将根结点值较小的二项树挂到根结点较大的二项树的根结点下就行。

二项堆合并：

二项堆合并就是...]]></description><category></category></item><item><title><![CDATA[堆之左偏树]]></title><link>https://blog.youkuaiyun.com/ujn11456963/article/details/87202329</link><guid>https://blog.youkuaiyun.com/ujn11456963/article/details/87202329</guid><author>ujn11456963</author><pubDate>Thu, 14 Feb 2019 12:40:16 +0800</pubDate><description><![CDATA[左偏树(左偏堆)，优势：两个左偏树合并效率高O(logn)

外结点：一个结点的孩子数不满两个，就称之为外结点。

距离（dist）：每个节点上有个距离（dist）的属性，dist的值为该结点到最近的外结点所经过的边的个数。外结点的dist=0。空结点的dist=-1。

左偏树定义：

1.是一颗二叉树。

2.是个堆。

3.每个节点的左节点的dist &amp;gt;=右结点dist

 

根据定...]]></description><category></category></item><item><title><![CDATA[堆]]></title><link>https://blog.youkuaiyun.com/ujn11456963/article/details/87113753</link><guid>https://blog.youkuaiyun.com/ujn11456963/article/details/87113753</guid><author>ujn11456963</author><pubDate>Tue, 12 Feb 2019 20:58:55 +0800</pubDate><description><![CDATA[堆是一颗特殊的树。常用于优先队列的实现

符合以下定义，即为堆：

1.是一颗树

2.树中的每个节点全都大于它的子节点（最大堆），或者每个节点全都小于它的子节点（最小堆）



堆的合并：（最小堆为例）

方法1，随意从任意一个堆叶子节点中取下一个节点，将两个堆的根结点作为这个节点的左右子节点，这个节点就是新的根结点，然后，对堆进行一次维护

方法2：


//将堆顶更小的堆的右节点(堆)和另...]]></description><category></category></item><item><title><![CDATA[堆之二叉堆&堆排序]]></title><link>https://blog.youkuaiyun.com/ujn11456963/article/details/87080662</link><guid>https://blog.youkuaiyun.com/ujn11456963/article/details/87080662</guid><author>ujn11456963</author><pubDate>Tue, 12 Feb 2019 14:33:53 +0800</pubDate><description><![CDATA[二叉堆是特殊的完全二叉树。

定义，符合一下两点即为二叉堆：

1.是个堆

2.是个完全二叉树

因为是完全二叉树，所以一般用数组存储。

在数组中，f是父节点下标，l是左节点下标，r是右节点下标,son是子节点下标(l或者r)。

因为是完全二叉树，所以已知任何节点都能推断出它的关联节点：

（下标从0开始）

f = (son-1)/2

r = 2*f +1

l = 2*f +2

r ...]]></description><category></category></item><item><title><![CDATA[红黑树笔记]]></title><link>https://blog.youkuaiyun.com/ujn11456963/article/details/87073818</link><guid>https://blog.youkuaiyun.com/ujn11456963/article/details/87073818</guid><author>ujn11456963</author><pubDate>Tue, 12 Feb 2019 11:01:07 +0800</pubDate><description><![CDATA[红黑树学习

 

rb1:根结点必须是黑色，空叶子结点视为是黑色

rb2:不能有两个相邻的红色节点（父节点和子节点不能同时为红色）

rb3:从根结点到任意空叶子结点的路径的黑色结点数相等。

衍生推论：

1.红黑树从根结点起，最长路径比最短路径节点数比，不会超过2:1

2.以红黑树任意黑色节点为根，都是一颗红黑树

3.任意节点到外部节点的所有路径中，黑色节点数是一致的。

 

术语：...]]></description><category></category></item><item><title><![CDATA[protobuf笔记]]></title><link>https://blog.youkuaiyun.com/ujn11456963/article/details/80803583</link><guid>https://blog.youkuaiyun.com/ujn11456963/article/details/80803583</guid><author>ujn11456963</author><pubDate>Mon, 25 Jun 2018 16:26:54 +0800</pubDate><description><![CDATA[protobuf只是一个编码，解码工具，它和网络传输过程是没有关系的。protobuf使用流程如下：    1.写test.proto文件，通过protoc命令生成test.pb.cc 和test.pb.h文件。    2.把生成的代码文件添加到代码里，直接调用protobuf生成的API使用即可。    3.编译的时候链接 -lprotobuf 库。过程描述：    1.发送端先把要发送的信息通...]]></description><category></category></item><item><title><![CDATA[逆波兰表达式]]></title><link>https://blog.youkuaiyun.com/ujn11456963/article/details/80790630</link><guid>https://blog.youkuaiyun.com/ujn11456963/article/details/80790630</guid><author>ujn11456963</author><pubDate>Sun, 24 Jun 2018 14:36:43 +0800</pubDate><description><![CDATA[    1 + 2 - (4 - 2 * 3 /2)  * 5

正常的中缀表达式(运算符左右是参与计算的两个值)，符合两条运算规则

    1.运算符优先级高的先计算。

    2.运算符优先级相同则左到右依次计算。

 

第一条运算规则是高于第二条的。

如果严格按照这个定律的话，中缀表达式在正常处理上，是比较跳脱的，步骤如下：

    1.需要先找到最高优先级的运算符，参与计算。

...]]></description><category></category></item><item><title><![CDATA[Leetcode 137. Single Number II]]></title><link>https://blog.youkuaiyun.com/ujn11456963/article/details/52558505</link><guid>https://blog.youkuaiyun.com/ujn11456963/article/details/52558505</guid><author>ujn11456963</author><pubDate>Sat, 17 Sep 2016 15:44:00 +0800</pubDate><description><![CDATA[题意：给定一个数组，已知这个数组中有一个数出现了一次，其它数都出现三次。找出这个数


解法：
有个很好理解的解法，因为int有32位，所以开一个数组bit［32］，遍历32次，把每个位出现的次数分别存入数组中，最后bit［32］分别对3取模，得到的结果，只出现一次的数。
这个算法的时间复杂度为O（32*N），相当的高。
从别的地方you看到另一种解法，复杂度为O（N），乍一看看不懂，]]></description><category></category></item><item><title><![CDATA[STL priority_queue 优先队列]]></title><link>https://blog.youkuaiyun.com/ujn11456963/article/details/52422668</link><guid>https://blog.youkuaiyun.com/ujn11456963/article/details/52422668</guid><author>ujn11456963</author><pubDate>Sat, 03 Sep 2016 15:14:42 +0800</pubDate><description><![CDATA[优先队列是用堆实现的疯

等丰富的]]></description><category></category></item><item><title><![CDATA[Leetcode 148. Sort List]]></title><link>https://blog.youkuaiyun.com/ujn11456963/article/details/52419498</link><guid>https://blog.youkuaiyun.com/ujn11456963/article/details/52419498</guid><author>ujn11456963</author><pubDate>Fri, 02 Sep 2016 22:09:34 +0800</pubDate><description><![CDATA[题意：链表排序，要求复杂度n*logn;


思路：这道题用了好长时间 ，我先用快速排序做的，结果超时了，发现样例中重复数据很多，看来有意不让用快拍。于是乎想到了归并排序，这应该是我第一次写完整的归并排序，特意分模块优美了一些。一下就是链表的归并排序


ListNode* sortList(ListNode* head) {
        ListNode *p;
        ]]></description><category></category></item><item><title><![CDATA[Leetcode 124. Binary Tree Maximum Path Sum]]></title><link>https://blog.youkuaiyun.com/ujn11456963/article/details/52382088</link><guid>https://blog.youkuaiyun.com/ujn11456963/article/details/52382088</guid><author>ujn11456963</author><pubDate>Wed, 31 Aug 2016 12:50:39 +0800</pubDate><description><![CDATA[题意:跟一个二叉树，求最大路径和。（路径和被定义为，从一个节点到另一个节点的值得和，注意:不一定是叶子节点）


思路:
1，最长路径和，必定是以某个节点为根，以此节点左子树的根到某个节点的最大路径，以此节点右子树的根到某节点的最大路径，的和。
2.对于一个节点，只存在3种情况，此节点是最长路径和的根，最长路径和的根在此节点的左子树，最长路径和的根在此节点的右子树
3.可以用递归解决，]]></description><category></category></item><item><title><![CDATA[Leetcode 94. Binary Tree Inorder Traversal]]></title><link>https://blog.youkuaiyun.com/ujn11456963/article/details/52347129</link><guid>https://blog.youkuaiyun.com/ujn11456963/article/details/52347129</guid><author>ujn11456963</author><pubDate>Sun, 28 Aug 2016 19:05:49 +0800</pubDate><description><![CDATA[题意:中序遍历二叉树，要求非递归



思路：设置一个栈，给每个节点设置一个标号，代表是否展开过。若未展开过，前序遍历就按right left root ,中序遍历就按 right  root left,后序遍历就按root right left压入栈。发现展开过，就直接放入vector中。循环，至栈为空，得到的vector就是遍历后的结果




/**
 * Definiti]]></description><category></category></item><item><title><![CDATA[Leetcode 101. Symmetric Tree]]></title><link>https://blog.youkuaiyun.com/ujn11456963/article/details/52335971</link><guid>https://blog.youkuaiyun.com/ujn11456963/article/details/52335971</guid><author>ujn11456963</author><pubDate>Sat, 27 Aug 2016 17:05:26 +0800</pubDate><description><![CDATA[题意：给定一棵树，判断它是否沿中轴线对称
思路：
每次把同时遍历根的左右子树，分别对比就行了


/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int]]></description><category></category></item><item><title><![CDATA[Leetcode 114. Flatten Binary Tree to Linked List]]></title><link>https://blog.youkuaiyun.com/ujn11456963/article/details/52335674</link><guid>https://blog.youkuaiyun.com/ujn11456963/article/details/52335674</guid><author>ujn11456963</author><pubDate>Sat, 27 Aug 2016 16:41:56 +0800</pubDate><description><![CDATA[题意：给一棵树，按前序遍历的顺序将依次放在右子树上


思路：
1，第一眼看上去的思路是，前序遍历tree，节点依次加入队列，遍历完之后，出队，并连接成题目要求
时间复杂度O(N)  空间复杂度O(N)
2.想了想，一定有空间复杂度O(logN)的
对于一棵树，我要把它变成题中的链表状。需要1把左子树变成如题的链表状；2.把右子树变成链表状；3.根－>链状左子树，链状左子树的最后一个]]></description><category></category></item><item><title><![CDATA[Leetcode 8. String to Integer (atoi)]]></title><link>https://blog.youkuaiyun.com/ujn11456963/article/details/52253619</link><guid>https://blog.youkuaiyun.com/ujn11456963/article/details/52253619</guid><author>ujn11456963</author><pubDate>Fri, 19 Aug 2016 19:22:49 +0800</pubDate><description><![CDATA[题意:实现atoi();思路:题目简单，坑不好趟，改了好久atoi()规则如下:1.忽略首空格2.如果碰见不合法的输入，以最大能匹配的合法输入计算：比如123abc 会输出 123234T32 会输出 234否则返回03.支持加号4.如果上溢出，则输出最大值;如果下溢出，则输出最小值代码如下:（不建议看，写的太乱了)int myAtoi(string str) {
    
       // i...]]></description><category></category></item><item><title><![CDATA[Leetcode 7. Reverse Integer]]></title><link>https://blog.youkuaiyun.com/ujn11456963/article/details/52248916</link><guid>https://blog.youkuaiyun.com/ujn11456963/article/details/52248916</guid><author>ujn11456963</author><pubDate>Fri, 19 Aug 2016 11:11:18 +0800</pubDate><description><![CDATA[先判断反转后是否溢出，
再反转]]></description><category></category></item><item><title><![CDATA[shell爬虫]]></title><link>https://blog.youkuaiyun.com/ujn11456963/article/details/51356582</link><guid>https://blog.youkuaiyun.com/ujn11456963/article/details/51356582</guid><author>ujn11456963</author><pubDate>Mon, 09 May 2016 21:58:06 +0800</pubDate><description><![CDATA[curl 访问一个url
grep -o 精准匹配 字符串 

netcat 构造http报文发送]]></description><category></category></item></channel></rss>