- 博客(51)
- 资源 (1)
- 收藏
- 关注
原创 在UBUNTU上安装Hadoop
昨天在VM上安装了最新版的UBUNTU12.04。然后尝试在上面安装Hadoop1.02。没有尝试安装最新的2.x版本,怕有bug不够稳定。。。其中遇到几个问题,第一个是SSL安装失败,后来发现没有更新升级,通过apt-get update更新后可以正确安装。需要各位注意的是UBUNTU9.x版本貌似已经不能正确升级了。如果遇到同样的问题,并且发现使用的是9.x版本。建议使用新版本的UBUNT
2012-09-09 21:36:10
671
原创 求双调节点
如果一个数组是双调的,即1,2,3,6,4,2或者7,6,4,3,5,8,9我们需要能够找到双调的中心节点在什么位置。int DoubleTuning(int* list, int length){ int* mid = list + length / 2; int* start = list; int* end = list+length - 1; while(
2012-08-29 22:58:44
2024
原创 四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())
其实就是一个排列问题,唯一的区别是,需要注意右括号的数量不能超过左括号。#include void BracesHelper(int left, int right, int cur, int size,std::string output){ if(size == right) { printf("%s",0,output.c_str()); return;
2012-08-19 19:02:00
3686
原创 在两个有序数组中找到第k小的数
我们知道如果数组有序,我们可以在O(1)的时间内找到第k小的数,但是如何在两个有序数组中找到第k的数呢?我们可以在O(logn)的时间内找到这个数。貌似只要是在有序数列中找东西,大部分的时间复杂度都是O(logn),因为我们有神器二分查找。。int GetTopK(int* A, int * B, int lengthA, int lengthB, int k){ if(lengthA
2012-08-18 12:49:59
4958
原创 一道google的比较经典算法题
这是一道google的比较经典算法题,题目是:已经两个已经排好序的数组,找出两个数组合起来的中间大的数字。要求算法复杂度尽可能低。如:x数组:1,7,9,10,30 y数组:3,5,8,11 则中间大数为:8 时间复杂度是logn,我们可以比较两个数组的中位数,然后根据中位数的关系来进行二分查找。在边界条件判断上,我们要注意奇偶情况,如果是偶数个元素的数组,我们需要取上中位数,
2012-08-11 22:24:19
1044
原创 求整数随机数构成的数组中找到最长的等差数列
格式:输入[1,3,0,5,-1,6]输出[-1,1,3,5]要求时间复杂度,空间复杂度尽量小第一反应还是动态规划,我们可以先将数组排序,然后建立一个二维数组,来记录每一个输入数组中的数字和比他小的数字所有的相减结果的当前最长等差数列长度。我们用n代表当前的数字,d代表等差数列的差值。于是f(n,m) = f(n-m,m) + 1。 f(n-m,m)为比n小m的数字所包含的等差数列
2012-08-06 22:44:03
1207
原创 2006 年百度之星程序设计大赛初赛题目 6 百度语言翻译机
百度语言翻译机2006 年百度之星程序设计大赛初赛题目 6 百度语言翻译机 时限 1s 百度的工程师们是非常注重效率的,在长期的开发与测试过程中,他们逐渐创造了一套他们独特的缩率语。他们在平时的交谈,会议,甚至在各中技术文档中都会大量运用。 为了让新员工可以更快地适应百度的文化,更好地阅读公司的技术文档,人力资源部决定开发一套专用的翻译系统,把相关文档中的缩率语
2012-08-05 22:16:00
1592
原创 机器人挖金矿的动态规划算法
对于玩过星际的同学来说,都知道花50可以买一个机器人,然而每个机器人都有会在一定时间内采集一定的矿,例如每分钟可采矿5。于是有了我们今天的题目,输入初始机器人数量,初始金矿数量以及分钟数。求最多的采矿量。例如,初始金矿是50,初始机器人是5个,一分钟后的最大采矿量是75。 初始金矿是50,初始机器人是5个,二十分钟后的最大采矿量是745。抛开初始金矿数量,我们可以知道影响采矿量的因素由采矿分钟
2012-08-05 20:00:42
4619
原创 有两个序列a,b,要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。例如: var a=[100,99,98,1,2, 3];var b=[1, 2, 3, 4,5,40]; 网上对于这道题的描述很多,所以拿来练习练习。最直接了当的方法就是尝试各种组合。当然这种解法的时间复杂度是阶乘,显然不能接受。下面
2012-07-29 12:05:51
2811
原创 求子数组的和最接近特定值
昨天写了关于子数组的和等于特定值的算法。今天和大家分享求子数组的和最接近特定值,和等于特定值的区别在于只是建树的过程不太一样。需要插入,每个节点的时候记录与当前节点最接近的节点,并且将差值保存起来。差值越小说明越接近特定值。struct Node{ Node* left; Node* right; int value; int pos;};int g_min = -1;
2012-07-22 17:28:14
1411
原创 子数组的和等于特定值
这是一道比较经典的数组算法题。很多地方都有解法。当然蛮力肯定是不得分的。我们来看一个数组A1,A2...An. 如果我们想得到Ai到Aj的和。我们可以求A1..Ai-1的和,然后再求A1到Aj的和。用这两个和相减,得到的就是Ai到Aj的和。因为A1到Aj的和包括A1到Ai-1,Ai到Aj。那么通过一次遍历数组我们就能够得到A1到An中任意数的和。但是我们要找的是子数组之和等于特定值。我们如何利
2012-07-21 22:30:23
4371
原创 求最大和子矩阵
这道题大家在很多地方都能找到。基本思路首先将矩阵二维问题转换为求一维数组的子数组问题。前面我们已经提到如何求一维数组的最大和子数组。我们可以写出每一列的全排列然后把每种排列都视为一个数组,然后输出最大的结果的矩阵就可以了。该实现我还没有验证。抽空将验证下。 void getMaxSumSubArray(int* list, int length, int& MaxSum,int& Maxs
2012-07-15 21:09:35
1018
原创 获得最大和的子序列
如果子序列都是正数,那么该子序列一定是最大和得子序列的一部分。如果下一个数为负数,那么需要判断该负数和当前子序列的和是否未正。如果是负数,那么我们可以认为包含这个负数的子序列一定不是最大子序列。但是如果为正数,我们还需要继续判断后续节点是否可以使得最大和增加。例如1,2,-2,4显然1,2,-2,4为最大子序列。但是如果1,2,-2,1那么最大子序列应该为1,2.。那么用该方法判断可以在O(n)的
2012-07-15 20:36:30
820
原创 查询序列中的最长递增子序列的长度
int FindMaxSS(int* list, int n){ if( 0 >= n) { return 0; } if( 1 == n) { return 1; } int * maxv = new int[n]; int* maxL = new int[n]; for(int i = 0;i<n; ++i) { maxv[i
2012-07-09 21:51:32
916
原创 求给定值以内的所有素数
首先如果一个数不能被任何小于等于该数平方根的数整除,则其是一个素数,这个很好理解。例如数m=n*n,则m一定不是素数因为可以被n整除。如果m=k*j.k大于m的平方根。那么j一定小于其平方根。所以可以证明m只要不能被小于平方根的数整,则一定不会被大于平方根的数整除。第二,如果一个数不能被比他小的所有素数整除,则其是一个素数。因为比这个数小的其他数都应该可以用比他小的素数整除。另外程序中第六
2012-07-07 17:53:22
938
原创 限制类被继承或者函数被重写
在系统开发过程中,我们需要通过对程序进行特殊的限制来表达那些是接口,那些是内部的实现。而C++不像Java或C#。拥有public class或者interface的keyword。在这里介绍在C++中如何限制类或函数被派生。首先我们看几个例子。class InterClass{};class B :public InterClass{}; 在这里Inter
2012-07-06 11:13:42
879
原创 在有序递增数组中查找一个缺少的数字
例如2,3,4,5,6,8,9.在这个数组中我们要找到缺少的7。从直觉上看,我们可以把2到9求和,然后把数组的成员求和。用数字的和减去数组的和得到的就是缺少的数字。但是这个办法的时间复杂度是O(n)。但是我们看到数组是有序的,能不能通过二分法找到数字呢,答案是肯定的。我们可以发现规律,如果数字缺少在数组的前半部分,那么数组的中间节点会大于数字的中间节点。例如1,3,4由于缺少2,所以数组的中间节点
2012-07-05 22:07:46
4929
1
原创 二叉搜索树中查找与目标数字最接近的节点
struct Node{int value;Node* left;Node* right;};Node* LeftPrev = NULL;Node* RightPrev = NULL;Node* GetNearestNode(Node* root, int k){ if(NULL == root) { return NULL; } if(k == root->valu
2012-07-04 21:26:07
2237
原创 通过中序和后续遍历数组重建二叉树
和前面的两种方式类似,根据后续遍历数组的最后一个元素可以在中序数组中找到根节点,然后左边的为左子树,右边的为右子树。递归可得二叉树。void CreateTreeByMidAndPost(Node* node, char * mid, char * post, int size){ if(NULL ==node) { return; } if(1 == size )
2012-06-30 13:16:13
913
原创 通过前序和后序遍历数组重建树
其实和通过前序和中序遍历数组重建树类似。区别是先从前序数组中找到根节点的下一个元素在后续数组中的位置,判断该元素的下一个节点是不是根节点,如果不是,则说明该元素是根节点的左孩子,因为在后续数组中该元素和根节点有其他节点,即右子树。我们可以用同样的方法先创建左子树,在创建右子树。然后按照顺序递归,即可重建二叉树。 void CreateTreeByPreAndPost(Node* nod
2012-06-30 13:14:03
1579
原创 通过前序和中序遍历数组重建树
其实通过前序中序和后序遍历的数组重建树是一件很好理解的过程。前序的特点是根节点先被输出,中序是左节点,根节点和右节点。后续是左右根。有了这个特点后,中序遍历数组中首先找前序中的第一个节点,也就是树的根节点,如果发现在中序数组中这个根节点前面有元素,代表该跟节点有左孩子,也就是中序中前面的子数组。该子数组包含的元素和在前序遍历中根节点后的子数组长度内的元素是一致的。因为既然有左节点,所以前序
2012-06-30 13:09:44
1539
原创 判断循环链表
分别用两个指针步进一步和两步,如果存在循环,则最差在不仅两步的指针遍历循环节两遍后可发现链表循环。 struct Node{ Node* next;};bool LoopList(Node* head){ if(NULL == head) { return false; } Node* SinglePace = head->next; N
2012-06-29 09:50:34
1487
原创 2006 年百度之星程序设计大赛初赛题目 5
座位调整 题目描述: 百度办公区里到处摆放着各种各样的零食。百度人力资源部的调研发现,员工如果可以在自己喜欢的美食旁边工作,工作效率会大大提高。因此,百度决定进行一次员工座位的大调整。调整的方法如下: 1 . 首先将办公区按照各种零食的摆放分成 N 个不同的区域。(例如:可乐区,饼干区,牛奶区等等)。 2 . 每个员工对不同的零食区域有不同的喜好程度(喜
2012-06-28 22:45:16
1465
原创 有序 循环数组的二分查找
例如 10,11,12,13,14,1,2,3,4,5,6,7,8,9虽然整体上不是有序的,但是只是在某个节点进行了循环。在这样的数组中进行查找,可以使用二分查找法。但是需要判断选环节的位置。int Find(int* source, int size, int num){ if(NULL == source || size < 0) { return -1; } i
2012-06-28 14:31:11
1594
原创 24点实现
void SwapNumber(int* a, int*b){ if(NULL != a && NULL !=b) { return; } int temp = *b; *b = *a; *a = temp;}int G24points(int* source, int length, int cnt){ if(length < 0 || NULL
2012-06-28 11:51:07
663
原创 字符串全排列算法
可以分为两种方式,递归和循环oid swap(char* a, char*b){ char temp = *b; *b = *a; *a = temp;}void permute(char* source, int length, int cnt){ if(length == cnt) { printf("%s ", source);
2012-06-28 11:16:17
598
原创 如何安装VS2011Beta版
VS2011将是Visual Studio 的最新一代产品。这篇文章,我们将介绍如何安装VS2011Beta版。首先我们可以在http://www.microsoft.com/visualstudio/11/zh-cn/downloads#vs下到VS2011Beta版。我们可以在页面看到VS2011各个版本的区别http://www.microsoft.com/visualstudi
2012-05-15 21:01:51
981
原创 解决 关于Silverlight使用WCF时抛出异常 Could not find default endpoint element that references contract...
环境是这样的在solution中添加了一个WebSite,在WebSite中添加了一个Silverlight-enabled WCF Service(添加普通的WCF Service,在Silverlight中使用service reference时会报错。但是通过修改config和契约是可以使用的,这里简化背景,只适用Silverlight-enabled WCF Service)。 再向s
2009-06-12 11:07:00
5978
原创 异常安全--MFC框架的异常捕获
MFC使用的异常捕获方式是捕获异常的指针。这样做的好处有两点1 可以使用面向对象的多态特性2 不存在临时对象产生,提高性能。 但是这样做有一个问题就是关于抛出的这个对象的指针由谁来释放?最安全的最法是在捕捉到异常的指针后,在使用后将其delete,并赋值为NULL。比如://...catch(CException* e){// using e, an
2009-06-10 09:16:00
4106
原创 异常安全-对象生命周期
对象生命周期:构造函数调用结束后,析构函数调用之前。类的非托管成员变量(自己new出来的对象、数组等等),永远不要写到初始化列表中例:class InilException {public: InilException(); virtual ~InilException();public: int* m_array;};类InilException中含有非托管的成员变量 m_array
2009-06-10 09:09:00
868
原创 C++0X 右值引用
简介C++0X是新一代C++标准的非官方名称。它将代替C++03成为C++最新的标准。C++0X对C++的核心语言以及标准库经进行了部分更新。C++0X完全兼容目前的C++标准。在C++0X之中,语言本身添加了对于多线程的支持。一些细节得到了改进,例如支持统一初始化方式。对泛型编程的支持方面有了更边界的,同时对功能进行了改进。核心语言功能右值引用在C++03中,
2009-06-10 08:47:00
4437
原创 ActiveX插件在关闭IE窗口时使得IE崩溃
当我们通过VC向导创建一个ActiveX插件.将这个插件添加到页面中。在有的情况下会使得关闭过程中IE崩溃。位置在 AfxWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) {
2009-05-22 13:21:00
3233
原创 oracle存储过程的调试
本文主要介绍如何在PL/SQL Developer中如何调试oracle的存储过程。1. 打开PL/SQL Developer如果在机器上安装了PL/SQL Developer的话,打开PL/SQL Developer界面输入用户名,密码和host名字,这个跟在程序中web.config中配置的完全相同,点击确定 找到需要调试的存储过程所在的包(Pac
2009-04-28 09:01:00
6748
2
原创 Optimizing Memcpy improves speed
The memcpy() routine in every C library moves blocks of memory of arbitrary size. Its used quite a bit in some programs and so is a natural target for optimization. Cross-compiler vendors generally i
2009-04-23 17:43:00
1045
转载 orca 创建select file browse 选择文件自定对话框
在 %ProgramFiles%/Microsoft Visual Studio 8/Common7/Tools/Deployment/VsdDialogs/1033 目录下提供丰富的安装对话框,其中就有选择路径的,可就是没有选择文件的,还好我们可以借助orca工具来编辑属于自己的对话框。 1. 在%ProgramFiles%/Microsoft Visual Studio 8/Com
2009-01-23 11:05:00
1786
原创 如何自定义msi安装程序
VS2008和VS2005都提供了比较方便的安装程序工程,并且在工程中可以添加自定义的User Interface和自定义事件。但是VS2008提供的User Interface只限于集中很固定的Dialog(关于如何生成自定义的Dialog模板,请参考http://www.codeproject.com/KB/install/vsSetupCustomDialogs.aspx),如果想要在安
2009-01-23 10:20:00
2907
1
原创 如何进行WebSite部署安装
此文主要解决问题,如何进行WebSite部署安装。对于WebSite的安装,VS系列并没有提供较好的解决方案。通过工程列表中的WebSite Setup Project安装后,会发现安装路径下的文件居然包括源代码。如何对部署的结果进行安装呢。微软似乎也发现了这个问题,于是提供了VS插件WebDeploymentSetup,通过它就可以获得部署后的文件,然后只需要对这些文件进行打包,安装后就是一
2009-01-23 09:21:00
2136
1
原创 关于STL的_Construct实现问题
描述:stl(指vs2008的stl)中的vector在分配对象的时候,出现一些意想不到的事情.比如:class A{};vector a(10);这样就可以构造出一个有10个元素类型为A的vector, 考察其构造过程,就会发现其实并不是构造了10个A,而是构造了11个A,然后再析构1个.这个主要是实现的问题,看源码就知道,explicit vector(size_type _Count
2009-01-14 09:08:00
2390
原创 VC++书籍介绍
首先说明Visual C++是一个工具,而C++是一门充满魅力的语言和艺术。要想透彻的理解其中的奥妙,并不是看一些大师的书籍就能够掌握的。需要大家大量的实际操作和经验的积累。单纯的看书可以敲开C++的大门,但是不足以找到密室的机关。其次MSDN永远是最有效的帮助工具以及学习手册。80%的问题都可以在其中找到答案。Microsoft WebCast 专家授课网上视频,效果非常好下
2009-01-11 17:05:00
4774
原创 VC++下后置++运算符
以下操作后m的值是多少?int m = 1;m = m++;根据很多书中介绍,后置++运算符的实现是用一个局部变量保存临时值,用来返回。那么我们可以假设int型后置++运算符的实现类似const int operator++(int){ int temp = m_n; m_n++; return temp;}那么m=m++
2009-01-10 10:17:00
871
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人