<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[bobten2008的专栏]]></title><description><![CDATA[The art of algorithm]]></description><link>https://blog.youkuaiyun.com/bobten2008</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; bobten2008]]></copyright><item><title><![CDATA[给定二叉树的前序和中序，判断是否可以构成一颗二叉树，如果可以输出后序]]></title><link>https://blog.youkuaiyun.com/bobten2008/article/details/9960773</link><guid>https://blog.youkuaiyun.com/bobten2008/article/details/9960773</guid><author>bobten2008</author><pubDate>Wed, 14 Aug 2013 10:49:35 +0800</pubDate><description><![CDATA[很简单，注意边界条件
int main() {
  while (scanf("%d", &n) != EOF) {
    for (int i = 0; i < n; i++) {
      scanf("%d", &pre[i]);
    }   
    for (int i = 0; i < n; i++) {
      scanf("%d", &in[i]);
    }]]></description><category></category></item><item><title><![CDATA[行列有序数组求给定数是否存在]]></title><link>https://blog.youkuaiyun.com/bobten2008/article/details/9959229</link><guid>https://blog.youkuaiyun.com/bobten2008/article/details/9959229</guid><author>bobten2008</author><pubDate>Wed, 14 Aug 2013 09:34:28 +0800</pubDate><description><![CDATA[沿对角线二分，并对独行独列进行优化
输入示例：

样例输入： 
3 3
5
1 2 3
4 5 6
7 8 9
3 3
1
2 3 4
5 6 7
8 9 10
3 3
12
2 3 4
5 6 7
8 9 10


样例输出： 
Yes
No
No






#include 
#include 
#include 

using namespace std;

co]]></description><category></category></item><item><title><![CDATA[一个数组只含0,1,2三种数，对这个数组排序，要求只能扫描一遍数组]]></title><link>https://blog.youkuaiyun.com/bobten2008/article/details/9762655</link><guid>https://blog.youkuaiyun.com/bobten2008/article/details/9762655</guid><author>bobten2008</author><pubDate>Mon, 05 Aug 2013 09:43:23 +0800</pubDate><description><![CDATA[#include 

using namespace std;

void Swap(int* v1, int* v2) {
  int temp = *v1;
  *v1 = *v2;
  *v2 = temp;
}

void SortArray(int* array, int len) {
  int i = 0, j = len - 1, k = 0;
  while (k < j) {
]]></description><category></category></item><item><title><![CDATA[按层次打印二叉树元素]]></title><link>https://blog.youkuaiyun.com/bobten2008/article/details/9747425</link><guid>https://blog.youkuaiyun.com/bobten2008/article/details/9747425</guid><author>bobten2008</author><pubDate>Sun, 04 Aug 2013 15:48:02 +0800</pubDate><description><![CDATA[非常简单：
#include 
#include 

using namespace std;

struct Node {
  Node* left;
  Node* right;
  int value;
  Node(int v) {
    left = right = NULL;
    value = v;
  }
  ~Node() {
    if (left) {
      ]]></description><category></category></item><item><title><![CDATA[一颗完全二叉树，求其结点个数]]></title><link>https://blog.youkuaiyun.com/bobten2008/article/details/9734979</link><guid>https://blog.youkuaiyun.com/bobten2008/article/details/9734979</guid><author>bobten2008</author><pubDate>Sat, 03 Aug 2013 20:29:45 +0800</pubDate><description><![CDATA[网上看了很多人的答案，都说最优解是o(n），想到了一种更快的算法，负责度是O(lgn的平方），就是对左右子树进行二分，找最后一层的最右边那个结点即可：


#include 
#include 
#include 

using namespace std;

struct Node {
  Node* left;
  Node* right;
  ~Node() {
    if (lef]]></description><category></category></item><item><title><![CDATA[快速排序的改进算法]]></title><link>https://blog.youkuaiyun.com/bobten2008/article/details/6733977</link><guid>https://blog.youkuaiyun.com/bobten2008/article/details/6733977</guid><author>bobten2008</author><pubDate>Tue, 30 Aug 2011 22:07:54 +0800</pubDate><description><![CDATA[今天想到了一种改进的快速排序，不知道之前有没有人想到过
同样是快速排序，稍微一点改进可能带来运算效率的质变
FAST_SORT_TYPE_1：是比较常见的版本
FAST_SORT_TYPE_2：是我的改进版本，
慢慢增加待排数组长度len，你会发现效率的差别逐渐显现出来]]></description><category></category></item><item><title><![CDATA[如何求两个有序数组的第K个数]]></title><link>https://blog.youkuaiyun.com/bobten2008/article/details/6097197</link><guid>https://blog.youkuaiyun.com/bobten2008/article/details/6097197</guid><author>bobten2008</author><pubDate>Fri, 24 Dec 2010 22:50:00 +0800</pubDate><description><![CDATA[<br />给定两个已排序数组，如何求第K个数。传统的做法就是类似归并排序的方式，时间<br />复杂度是O（N），这里给出一个二分法，时间复杂度是O（lgN）<br /> <br />#include <iostream>
#include <algorithm>
#include <ctime>
//#define DEBUG

#define MINV(a, b) ((a) <= (b) ? (a) : (b))
#define MAXV(a, b) ((a) >= (b) ? (a) :]]></description><category></category></item><item><title><![CDATA[链式结构的快速排序]]></title><link>https://blog.youkuaiyun.com/bobten2008/article/details/5997525</link><guid>https://blog.youkuaiyun.com/bobten2008/article/details/5997525</guid><author>bobten2008</author><pubDate>Tue, 09 Nov 2010 14:42:00 +0800</pubDate><description><![CDATA[#include 
#include 
#define LEN 20
#define MAX_VAL 100
using namespace std;
// 链式结构元素
struct elem
{
	elem()
	{
		value = 0;
		next = NULL;]]></description><category></category></item><item><title><![CDATA[链式结构的归并排序]]></title><link>https://blog.youkuaiyun.com/bobten2008/article/details/5951520</link><guid>https://blog.youkuaiyun.com/bobten2008/article/details/5951520</guid><author>bobten2008</author><pubDate>Tue, 19 Oct 2010 15:56:00 +0800</pubDate><description><![CDATA[struct node{int32_t value;node* head;node* tail;}int compare_node(node* node_1, node* node_2){if(node_1->value value){return -1;}else if(node_1->value == node_2->value){return 0;}else{return 1;}}/*对链式结构进行归并排序, 输入是待排序链表表头，返回值是排序后的表头指针sort_type = -1: 升序， 1:降]]></description><category></category></item><item><title><![CDATA[编程之美 1.4 买书问题【贪心思路的分析】]]></title><link>https://blog.youkuaiyun.com/bobten2008/article/details/5917128</link><guid>https://blog.youkuaiyun.com/bobten2008/article/details/5917128</guid><author>bobten2008</author><pubDate>Thu, 30 Sep 2010 20:50:00 +0800</pubDate><description><![CDATA[<br />这段时间太忙，好久没有写优快云了，今天在重新看编程之美1.4买书问题的时候有了新的体会，于是就记录下来。看来真是“温故而知新”<br /> <br />1.5首先给出了一个动态规划版本，我第一次看编程之美的时候，自己一下子也想到了动态规划版本，就没往后看了。今天重新看了下才知道后面的贪心才是精华。<br /> <br />（1）按照正常的思路，我们有了以下贪心策略：购买Y5本5卷，购买Y4-Y5本4卷，购买Y3-Y4本3卷，购买Y3-Y4本3卷，购买Y2-Y3本2卷，购买Y1-Y2本1卷<br]]></description><category></category></item><item><title><![CDATA[诡异的程序_1【程序的效率问题】]]></title><link>https://blog.youkuaiyun.com/bobten2008/article/details/5719044</link><guid>https://blog.youkuaiyun.com/bobten2008/article/details/5719044</guid><author>bobten2008</author><pubDate>Wed, 07 Jul 2010 16:54:00 +0800</pubDate><description><![CDATA[下面的代码求int array[0, MAX_LEN - 1]中的最大值，这里MAX_LEN设定为30，求30个元素的数组中的最大值，整个程序居然花了7.563秒，这是为什么？#include 
#include 
#include
#define MAX_LEN 30
#define maxv(a, b) ((a) >= (b) ? (a) : (b))
int array[MAX_LEN];
int getmaxv(int n)
{
    if(n == 1) return array]]></description><category></category></item><item><title><![CDATA[【网易有道面试题一】求单词集可以唯一标识每个单词的最短前缀]]></title><link>https://blog.youkuaiyun.com/bobten2008/article/details/5698962</link><guid>https://blog.youkuaiyun.com/bobten2008/article/details/5698962</guid><author>bobten2008</author><pubDate>Mon, 28 Jun 2010 11:44:00 +0800</pubDate><description><![CDATA[这道题的给定一个单词集合，里面没有重复的单词，然后为每一个单词求出可以唯一标识这个单词的最短前缀.比如对于单词集合：输入：{abc, abcd}, 输出就是abc, abcd输入：{a, c}, 输出就是a, c输入：{abc, abd, abcd}, 输出就是abc, abd, abcd输入：{abc, bdc}, 输出就是 a, b为了节省空间和提高运算速度，字典树是一个非常好的选择，而且往往和前缀相关的问题都可以用字典树来解决.#include 
#include 
#define MAX_N 1]]></description><category></category></item><item><title><![CDATA[POJ 2516 Minimum Cost 【MCMF：最小费用最大流】]]></title><link>https://blog.youkuaiyun.com/bobten2008/article/details/5691733</link><guid>https://blog.youkuaiyun.com/bobten2008/article/details/5691733</guid><author>bobten2008</author><pubDate>Thu, 24 Jun 2010 15:37:00 +0800</pubDate><description><![CDATA[/*第一次做最小代价最大流(MCMF)的题，所谓最小代价最大流就是要找到一个最大流量的方案且这个最大流所需要的费用是所有相等流量中最小的MCMF和普通的最大流问题的唯一区别是每次找增广路径是要找费用最小的路径，这就需要维护一个费用图，每次增流时需要将这次增流耗费的费用加到总费用上去并修改费用图。由于商品之间是不相关的，所以对每种商品分别使用MCMF就行，如果有一种商品得不到满足就跳出，如果能一直执行，则最后输出minCost即可*/#include 
#define MAX_VAL 99999999   ]]></description><category></category></item><item><title><![CDATA[最小费用最大流问题]]></title><link>https://blog.youkuaiyun.com/bobten2008/article/details/5688489</link><guid>https://blog.youkuaiyun.com/bobten2008/article/details/5688489</guid><author>bobten2008</author><pubDate>Wed, 23 Jun 2010 10:24:00 +0800</pubDate><description><![CDATA[◆最小费用最大流【MCMF问题及数学模型】 　　在介绍最大流问题时，我们列举了一个最大物资输送流问题。如果这个问题的已知条件还包括每条边运送单位物资的费用，那么怎样运送，才能得到最大运输量，并且输送费用最少？这便是所谓最小费用最大流问题。 
　　在最大流的有关定义的基础上，若每条有向边除权数c(e)（表示边容量）外还有另外一个权数w(e)（表示单位流所需费用），并且已求得该网络的最大流值为F， 
那么最小费用最大流问题，显然可用以下线性规划模型加以描述： 　　　Min ∑ w(e)f(e) e∈E 　满]]></description><category></category></item><item><title><![CDATA[POJ 2195 Going Home【KM算法-二分图的最优匹配】]]></title><link>https://blog.youkuaiyun.com/bobten2008/article/details/5688261</link><guid>https://blog.youkuaiyun.com/bobten2008/article/details/5688261</guid><author>bobten2008</author><pubDate>Wed, 23 Jun 2010 08:56:00 +0800</pubDate><description><![CDATA[ Going HomeTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 8380 Accepted: 4324DescriptionOn a grid map there are n little men and n houses. In 
each unit time, every little man can move one unit step, either horizontally, or 
vertically, to an ]]></description><category></category></item><item><title><![CDATA[全排列之Hash实现 - 变进制数 【转】]]></title><link>https://blog.youkuaiyun.com/bobten2008/article/details/5668600</link><guid>https://blog.youkuaiyun.com/bobten2008/article/details/5668600</guid><author>bobten2008</author><pubDate>Sun, 13 Jun 2010 10:52:00 +0800</pubDate><description><![CDATA[<br />我们经常使用的数的进制为“常数进制”，即始终逢p进1。例如，p进制数K可表示为<br />K = a0*p^0 + a1*p^1 + a2*p^2 + ... + an*p^n （其中0 <= ai <= p-1），<br />它可以表示任何一个自然数。<br /><br />对于这种常数进制表示法，以及各种进制之间的转换大家应该是很熟悉的了，但大家可能很少听说变进制数。这里我要介绍一种特殊的变进制数，它能够被用来实现 全排列的Hash函数，并且该Hash函数能够实现完美的防碰撞和空间利用（不会]]></description><category></category></item><item><title><![CDATA[【网易有道10年编程赛 资格赛第一场】 第三题 最大和子序列 【转】]]></title><link>https://blog.youkuaiyun.com/bobten2008/article/details/5637168</link><guid>https://blog.youkuaiyun.com/bobten2008/article/details/5637168</guid><author>bobten2008</author><pubDate>Mon, 31 May 2010 16:54:00 +0800</pubDate><description><![CDATA[描述 
给一个整数数组A={a1,a2,…an}, 
将这个数组首尾相接连成一个环状，它的一个子序列是指这个数组连续的一段，比如a2,a3…ak，或者an,a1…ai。请从这个环上选取两个不重叠的非空子序列，使这两个子序列中的所有数字之和最大。在三个样例中分别选取的子序列是:样例一: 
{a1} {a3}样例二: {a1} {a3}样例三: {a5,a1} {a3} 
输入 
输入的第一行包含一个正整数T(1接下来每个测试数据包含两行，第一行是一个正整数n(2算法：分别求两段最大和以及两段最小和即]]></description><category></category></item><item><title><![CDATA[去除表达式里面多余的（）]]></title><link>https://blog.youkuaiyun.com/bobten2008/article/details/5636524</link><guid>https://blog.youkuaiyun.com/bobten2008/article/details/5636524</guid><author>bobten2008</author><pubDate>Mon, 31 May 2010 14:33:00 +0800</pubDate><description><![CDATA[去除表达式里面多余的（）检查字符串表达式中的括号是否匹配；左括号数目同有括号数目不相等即为不匹配；去除多余的左括号或者右括号，优先保留先出现的括号；匹配后去除无效的括号：如：((表达式)) 应为(表达式)；只考虑小括号，不考虑先出现右括号的情况；要求实现函数： (字符串最长长度为60；表达式正确性不需要考虑)void Bracket(char* src, char* dst);如果匹配则通过dst输出原串；如果不匹配则根据要求去处多于括号后通过dst输出匹配后的串示例输入：12+(345*25-34) 输出]]></description><category></category></item><item><title><![CDATA[【网易有道10年编程赛 资格赛第一场】 第二题 有道搜索框]]></title><link>https://blog.youkuaiyun.com/bobten2008/article/details/5636010</link><guid>https://blog.youkuaiyun.com/bobten2008/article/details/5636010</guid><author>bobten2008</author><pubDate>Mon, 31 May 2010 11:07:00 +0800</pubDate><description><![CDATA[描述在有道搜索框中，当输入一个或者多个字符时，搜索框会出现一定数量的提示，如下图所示：现在给你N个单词和一些查询，请输出提示结果，为了简化这个问题，只需要输出以查询词为前缀的并且按字典序排列的最前面的8个单词，如果符合要求的单词一个也没有请只输出当前查询词。 
输入 
第一行是一个正整数N，表示词表中有N个单词。接下来有N行，每行都有一个单词，注意词表中的单词可能有重复，请忽略掉重复单词。所有的单词都由小写字母组成。接下来的一行有一个正整数Q，表示接下来有Q个查询。接下来Q行，每行有一个单词，表示一个查]]></description><category></category></item><item><title><![CDATA[【网易有道10年编程赛 资格赛第一场】 第一题 另类的异或]]></title><link>https://blog.youkuaiyun.com/bobten2008/article/details/5636008</link><guid>https://blog.youkuaiyun.com/bobten2008/article/details/5636008</guid><author>bobten2008</author><pubDate>Mon, 31 May 2010 11:06:00 +0800</pubDate><description><![CDATA[ 描述 
对于普通的异或，其实是二进制的无进位的加法这里我们定义一种另类的异或A op B, op是一个仅由^组成的字符串，如果op中包含n个^，那么A 
op B表示A和B之间进行n+1进制的无进位的加法。下图展示了3 ^ 5 和 4 ^^ 5的计算过程输入 
第一行有一个正整数T, 表示下面共有T组测试数据。接下来T行，每行有一组测试数据，是由空格隔开的三个部分组成：A B 
CA和C是两个十进制整数，B是一个字符串，由n个^组成1 
#include 
using namespace st]]></description><category></category></item></channel></rss>