<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[yangrujing的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/yangrujing</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; yangrujing]]></copyright><item><title><![CDATA[2017校招笔试题]]></title><link>https://blog.youkuaiyun.com/yangrujing/article/details/52490807</link><guid>https://blog.youkuaiyun.com/yangrujing/article/details/52490807</guid><author>yangrujing</author><pubDate>Fri, 09 Sep 2016 21:55:50 +0800</pubDate><description><![CDATA[题目：输入一个字符串从左到右遍历，如果遇到三个连续相同的子串就将这个子串删除，并将原串剩下的部分拼接到一起，重复上述过程，直到字符串中没有可以删除的子串。 
eg： 
输入：AAABCCDDDCB  
           AABBBABBBA 
输出：BB 
           A重要：从一个字符串中删除一个子串，必须将原字符串的内容strcpy到开辟的数字中（new char[SIZE]），才]]></description><category></category></item><item><title><![CDATA[WebBench-1.5源码剖析]]></title><link>https://blog.youkuaiyun.com/yangrujing/article/details/52434458</link><guid>https://blog.youkuaiyun.com/yangrujing/article/details/52434458</guid><author>yangrujing</author><pubDate>Sun, 04 Sep 2016 20:18:58 +0800</pubDate><description><![CDATA[Web网站压力测试工具Webbench: 
        Webbench是Linux下的一个网站压力测试工具，最多可以模拟3万个并发连接去测试网站的负载能力.  它是由Lionbridge公司开发。 
        Webbech 能测试处在相同硬件上，不同服务的性能以及不同硬件上同一个服务的运行状况。 
        webBech的标准测试可以向我们展示服务器的两项内容：每分钟相应请求次]]></description><category></category></item><item><title><![CDATA[二叉树相关题]]></title><link>https://blog.youkuaiyun.com/yangrujing/article/details/52016222</link><guid>https://blog.youkuaiyun.com/yangrujing/article/details/52016222</guid><author>yangrujing</author><pubDate>Sun, 24 Jul 2016 21:03:14 +0800</pubDate><description><![CDATA[题目：在二叉树中找到一个节点中序遍历的下一个节点1、有父指针。分两种情况Node* FindNextNode(Node* node)
    {
        if (_root == NULL || node == NULL)
            return NULL;
        Node* next = NULL;
        //1、右不为空，找到右子树的最左节点即为下一个节]]></description><category></category></item><item><title><![CDATA[将搜索二叉树转换成有序的双向链表]]></title><link>https://blog.youkuaiyun.com/yangrujing/article/details/51985914</link><guid>https://blog.youkuaiyun.com/yangrujing/article/details/51985914</guid><author>yangrujing</author><pubDate>Thu, 21 Jul 2016 19:24:04 +0800</pubDate><description><![CDATA[根据搜索二叉树的性质：中序遍历是有序的，因此中序遍历搜索二叉树，将left相当于prev指向前一个小的数，right相当于next指向后一个较大的数。递归实现Node* TurnToList_R() //搜索树转换为有序的双向链表
    {
        cout << "递归" << endl;
        Node *Head = NULL; //头指针
        Node *Ta]]></description><category></category></item><item><title><![CDATA[求两个节点的最近公共祖先节点]]></title><link>https://blog.youkuaiyun.com/yangrujing/article/details/51985860</link><guid>https://blog.youkuaiyun.com/yangrujing/article/details/51985860</guid><author>yangrujing</author><pubDate>Thu, 21 Jul 2016 19:17:39 +0800</pubDate><description><![CDATA[分三种情况 
1、搜索二叉树，根据搜索二叉树的性质，左子树的所有节点比根节点小，右子树的所有节点比跟节点大。 
如果两个节点都比根节点小，则递归左子树 
如果两个节点都比跟节点大，则递归右子树 
否则，两个节点一个在左子树，一个在右子树，则当前节点就是最近公共祖先节点。 
2、二叉树有指向父节点的指针。问题转换成判断两个链表是否相交。 
先分别求出从两个节点到根节点的路径长度，让路径长的节点先走多出]]></description><category></category></item><item><title><![CDATA[并查集（求朋友圈的个数）]]></title><link>https://blog.youkuaiyun.com/yangrujing/article/details/51868630</link><guid>https://blog.youkuaiyun.com/yangrujing/article/details/51868630</guid><author>yangrujing</author><pubDate>Sat, 09 Jul 2016 21:17:10 +0800</pubDate><description><![CDATA[有如下题目： 
        已知有n个人和m对好友关系（存于数组r）。如果两个人是直接或间接的好友（好友的好友的好友…），则认为他们属于同一个朋友圈，请写程序求出这n个人里一共有多少个朋友圈。  
  假如：n = 5 ， m = 3 ， r = {{1 , 2} , {2 , 3} , {4 , 5}}，表示有5个人，1和2是好友，2和3是好友，4和5是好友，则1、2、3属于一个朋友圈，4、5]]></description><category></category></item><item><title><![CDATA[二叉搜索树及判断一棵树是否平衡]]></title><link>https://blog.youkuaiyun.com/yangrujing/article/details/51863734</link><guid>https://blog.youkuaiyun.com/yangrujing/article/details/51863734</guid><author>yangrujing</author><pubDate>Fri, 08 Jul 2016 20:34:42 +0800</pubDate><description><![CDATA[二叉搜索树的特点： 
    1. 每个节点都有一个作为搜索依据的关键码（key），所有节点的关键码互不相同。 
    2. 左子树上所有节点的关键码（key）都小于根节点的关键码（key）。 
    3. 右子树上所有节点的关键码（key）都大于根节点的关键码（key）。 
    4. 左右子树都是二叉搜索树。 
一棵二叉搜索树如下图： 
平衡二叉树的特点： 
左右子树的高度差<=1 
无法]]></description><category></category></item><item><title><![CDATA[二叉树的子树]]></title><link>https://blog.youkuaiyun.com/yangrujing/article/details/51570489</link><guid>https://blog.youkuaiyun.com/yangrujing/article/details/51570489</guid><author>yangrujing</author><pubDate>Thu, 02 Jun 2016 21:54:08 +0800</pubDate><description><![CDATA[题目：有两个二叉树，判断第二个树是不是第一个树的子树，即第二个树是不是第一个树的一部分。如图所示：红色标记中的部分就是第二棵树。 
#include<iostream>
using namespace std;struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNo]]></description><category></category></item><item><title><![CDATA[I/O多路复用之select/poll/epoll]]></title><link>https://blog.youkuaiyun.com/yangrujing/article/details/51519109</link><guid>https://blog.youkuaiyun.com/yangrujing/article/details/51519109</guid><author>yangrujing</author><pubDate>Fri, 27 May 2016 19:14:26 +0800</pubDate><description><![CDATA[1、基本概念　　IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取，它就通知该进程。IO多路复用适用如下场合： 
　　（1）当客户处理多个描述字时（一般是交互式输入和网络套接口），必须使用I/O复用。 
　　（2）当一个客户同时处理多个套接口时，而这种情况是可能的，但很少出现。 
　　（3）如果一个TCP服务器既要处理监听套接口，又要处理已连接套接口，一般也要用到I/O复用。]]></description><category></category></item><item><title><![CDATA[调整数组的顺序]]></title><link>https://blog.youkuaiyun.com/yangrujing/article/details/51418651</link><guid>https://blog.youkuaiyun.com/yangrujing/article/details/51418651</guid><author>yangrujing</author><pubDate>Sun, 15 May 2016 20:05:03 +0800</pubDate><description><![CDATA[数组奇数在偶数前面，使用函数指针#include<iostream>
using namespace std;bool IsOdd(int n) //判断是否为奇数
{
    return (n & 1) == 1;
}void ReOrder1(int *arr, int len, bool (*fun)(int))
{
    int begin = 0;
    int end = len]]></description><category></category></item><item><title><![CDATA[输出1到最大的n位数]]></title><link>https://blog.youkuaiyun.com/yangrujing/article/details/51418409</link><guid>https://blog.youkuaiyun.com/yangrujing/article/details/51418409</guid><author>yangrujing</author><pubDate>Sun, 15 May 2016 19:24:12 +0800</pubDate><description><![CDATA[#include<iostream>
#include<string.h>
using namespace std;bool add(char *num)
{
    if (num == NULL)
        return false;
    bool OverFlow = false;
    int nTakeOver = 0;//表示进位
    int len = strlen(n]]></description><category></category></item><item><title><![CDATA[求一个数的x次方]]></title><link>https://blog.youkuaiyun.com/yangrujing/article/details/51407409</link><guid>https://blog.youkuaiyun.com/yangrujing/article/details/51407409</guid><author>yangrujing</author><pubDate>Sat, 14 May 2016 18:39:08 +0800</pubDate><description><![CDATA[思路：分几种情况 
1、不合法的输入，基数等于0并且指数小于0。 
2、任何一个数的0次方都等于1。 
3、指数是负数，可以先对指数求绝对值，然后计算出次方的结果之后再取倒数。 
4、递归求次方效率更高，时间复杂度为O（lgn）。 
根据公式： 
#include<iostream>
using namespace std;//判断浮点数是否等于0
bool equal(double d1, dou]]></description><category></category></item><item><title><![CDATA[查找旋转数组的最小值]]></title><link>https://blog.youkuaiyun.com/yangrujing/article/details/51377823</link><guid>https://blog.youkuaiyun.com/yangrujing/article/details/51377823</guid><author>yangrujing</author><pubDate>Wed, 11 May 2016 20:07:56 +0800</pubDate><description><![CDATA[题目：输入一个递增排序的数组的一个旋转，输出旋转数组的最小值。例如：数组{4，5，6，1，2，3}为数组{1，2，3，4，5，6}的一个 旋转数组，该数组的最小值为1。 
思路：时间复杂度为O（n）的解法很简单。更高效的一种解法是利用二分查找实现O(lgn)的查找。两个标志begin和end，分别指向数组的第一个和最后一个元素。min指向数组中间项。如果arr[min]大于arr[begin]，最小]]></description><category></category></item><item><title><![CDATA[合并两个有序数组]]></title><link>https://blog.youkuaiyun.com/yangrujing/article/details/51375451</link><guid>https://blog.youkuaiyun.com/yangrujing/article/details/51375451</guid><author>yangrujing</author><pubDate>Wed, 11 May 2016 16:15:09 +0800</pubDate><description><![CDATA[题目：有两个排序的数组arr1和arr2，内存在arr1的末尾有足够的空余空间容纳arr2，实现一个函数，把arr2中的所有数字插入到arr1中，并且所有的数字是排序的 
思路：从后向前合并#include<iostream>
using namespace std;int* MergeTwoArr(int *arr1, int *arr2, int len1, int len2)
{
    if]]></description><category></category></item><item><title><![CDATA[用两个栈实现一个队列]]></title><link>https://blog.youkuaiyun.com/yangrujing/article/details/51347790</link><guid>https://blog.youkuaiyun.com/yangrujing/article/details/51347790</guid><author>yangrujing</author><pubDate>Sun, 08 May 2016 21:20:02 +0800</pubDate><description><![CDATA[题目：用两个栈实现一个队列，实现头删和尾插的功能。 
思路：栈是先进后出，队列是先进先出。用两个栈InsertStack和TmpStack。如果要插入数据就只往InsertStack中插。删除数据时，如果TmpStack为空，则将InsertStack中的数据逐个拿出来，插入到TmpStack中，这样先入InsertStack栈的元素，就被翻转到TmpStack的栈顶，就可以在TmpStack中直接]]></description><category></category></item><item><title><![CDATA[重建二叉树]]></title><link>https://blog.youkuaiyun.com/yangrujing/article/details/51340588</link><guid>https://blog.youkuaiyun.com/yangrujing/article/details/51340588</guid><author>yangrujing</author><pubDate>Sat, 07 May 2016 22:50:11 +0800</pubDate><description><![CDATA[题目：输入某二叉树的前序中序的遍历结果，重建出该二叉树。假设输入的前序和中序遍历中没有重复的数字。例如输入的前序遍历为{1，2，4，7，3，5，6，8}，中序遍历为{4，7，2，1，5，3，8，6}。 
根据前序和中序遍历，构建出二叉树如下图： 
后序遍历为：{7，4，2，5，8，6，3，1}。 
思路：在二叉树的前序遍历中第一个数就是根节点。在中序遍历中根节点在中间，左子树的节点位于根节点的左边，]]></description><category></category></item><item><title><![CDATA[单例模式]]></title><link>https://blog.youkuaiyun.com/yangrujing/article/details/51338963</link><guid>https://blog.youkuaiyun.com/yangrujing/article/details/51338963</guid><author>yangrujing</author><pubDate>Sat, 07 May 2016 17:28:29 +0800</pubDate><description><![CDATA[单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问，从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个，单例模式是最好的解决方案。有很多地方需要这样的功能模块，如系统的日志输出，GUI应用必须是单鼠标，MODEM的联接需要一条且只需要一条电话线，操作系统只能有一个窗口管理器]]></description><category></category></item><item><title><![CDATA[替换空格]]></title><link>https://blog.youkuaiyun.com/yangrujing/article/details/51334723</link><guid>https://blog.youkuaiyun.com/yangrujing/article/details/51334723</guid><author>yangrujing</author><pubDate>Fri, 06 May 2016 21:19:52 +0800</pubDate><description><![CDATA[题目：实现一个函数将字符串中每个空格替换成“*♥*”。例如：输入“Hello kkw accompany you long”，输出：“Hello*♥*kkw*♥*accompany*♥*you*♥*long”。 
思路：先遍历一次字符串，统计出字符串的原始长度和空格个数，并由此可以计算出替换之后字符串的总长度。每替换一个空格，长度增加2，因此替换以后字符串的长度等于原来的字符串长度加上2*空格数目。]]></description><category></category></item><item><title><![CDATA[在二维数组中查找一个数]]></title><link>https://blog.youkuaiyun.com/yangrujing/article/details/51318591</link><guid>https://blog.youkuaiyun.com/yangrujing/article/details/51318591</guid><author>yangrujing</author><pubDate>Fri, 06 May 2016 17:03:57 +0800</pubDate><description><![CDATA[题目：在一个二维数组中，每一行都按照从左到右递增的顺序，每一列都按照从上到下递增的顺序排序，编写一个函数，输入这样的一个二维数组和一个整数。判断该整数是否在二位数组中。 
思路]]></description><category></category></item><item><title><![CDATA[选择排序]]></title><link>https://blog.youkuaiyun.com/yangrujing/article/details/50505506</link><guid>https://blog.youkuaiyun.com/yangrujing/article/details/50505506</guid><author>yangrujing</author><pubDate>Tue, 12 Jan 2016 17:12:30 +0800</pubDate><description><![CDATA[#include<iostream>
using namespace std;void SelectSort(int *arr, int size)
{
    int begin = 0, end = size - 1;
    while (begin < end)
    {
        int min = begin;
        int max = end;
        for]]></description><category></category></item></channel></rss>