随笔分类 -  Algorithm

创建二叉树
摘要:创建二叉树2011年6月11日21:28有以下4点1:树本身有一个根节点root2:静态内部类Node,其中有左子节点,右子节点,以及构造方法。3:还有insert方法,将节点插入到数的root下4:最后是一个构建树的方法5:再往下就可以是对节点的操作方法了。public class BinaryTree {private Node root; /*定义一个静态内部类,Node节点*/public static class Node {Node left;Node right;int data; Node(int newData) {left = null;right = null;data 阅读全文

posted @ 2012-08-19 19:49 AllenZhao 阅读(756) 评论(0) 推荐(0)

同学PB经历的面试题
摘要:7.15云壤笔试:1小时。4个选择题,概率+多线程+排序+C++程序找错;2个编程题,LCA问题,3种方法,单链表相邻交换,Data类型不可copy constructor。1面:1小时。整数组,前k大,写完整的堆程序;一个int型数,求其二进制中1的个数,更优?;两个单链表交叉不?中心点?(Y型)2面:1小时。N*M二维数组,“蛇形”打印程序,4种状态;Decorator设计模式;Linux堆内存空间分配程序,链表,小心。Offer9.07情感分析和文本处理算法笔试:c/c++基础部分。c++的析构函数为何为虚函数?C++的string类实现?(strlen,strcpy)给的N,M,实现二 阅读全文

posted @ 2012-08-19 19:47 AllenZhao 阅读(883) 评论(0) 推荐(0)

一些笔试题目和整理的答案 - 腾讯(Tencent)
摘要:一些笔试题目和整理的答案 - 腾讯(Tencent)NO1Below is usual way we find one element in an arrayconst int *find1(const int* array, int n, int x){ const int* p = array; for(int i = 0; i const T *find1(const T* array, int n, T x){ const T* p = array; for(int i = 0; i class Stack{public:Stack(int = 10) ;~Stack() { dele 阅读全文

posted @ 2012-08-19 19:44 AllenZhao 阅读(153) 评论(0) 推荐(0)

split函数 字符串反转
摘要:题目如下:String str = " i am a programmer";其中空格个数分别是1,2,3个要求按照单词反转,也就是最后输出“programmer a am i"; 空格数分别为3,2,1。1:用split函数方式:[java]view plaincopyprint?publicstaticvoidreverse(){Strings="iamaprogrammer";//几个空格的数量分别为1,2,3String[]eg=s.split("",-1);Stringresult="";for 阅读全文

posted @ 2012-08-19 19:42 AllenZhao 阅读(573) 评论(0) 推荐(0)

给定一个字符串,包含中文字符和英文字符,取给定大小字节的子串。
摘要:题目如下:给定一个字符串,包含中文字符和英文字符,取给定大小字节的子串。 代码如下:[java]view plaincopyprint?importjava.io.UnsupportedEncodingException;publicclassCutString{/***判断是否是一个中文汉字*@paramc*@returntrue表示是中文汉字,false表示是英文字符*@throwsUnsupportedEncodingException*/publicstaticbooleanisChineseChar(charc)throwsUnsupportedEncodingException{. 阅读全文

posted @ 2012-08-19 19:42 AllenZhao 阅读(306) 评论(0) 推荐(0)

删除数组中的重复元素
摘要:方案1:用set也很容易的publicstaticvoidmain(String[]args){int[]nums={5,6,6,6,8,8,7};ListnumList=newArrayList();for(inti:nums)numList.add(i);SetnumSet=newHashSet();numSet.addAll(numList);System.out.println(numSet);}方案2:[java]publicstaticvoidmain(String[]args){String[]s={"1","10","15&qu 阅读全文

posted @ 2012-08-19 19:40 AllenZhao 阅读(156) 评论(0) 推荐(0)

不使用除法,线性复杂度给数组赋值
摘要:一个长度为n的数组a[0],a[1],...,a[n-1]。现在更新数组的名个元素,即a[0]变为a[1]到a[n-1]的积,a[1]变为a[0]和a[2]到a[n-1]的积,...,a[n-1]为a[0]到a[n-2]的积。程序要求:要求具有线性复杂度。不能使用除法运算符privatevoidtransfer(int[] a){intn = a.length;int[] b =newint[n];int[] c =newint[n]; b[0] = 1; c[n-1] = 1;for(inti=1; i<n; i++) { b[i] = b[i-1]*a[i-1]; c[n-i-1] 阅读全文

posted @ 2012-08-19 19:40 AllenZhao 阅读(175) 评论(0) 推荐(0)

不用运算符比较两个int数的大小
摘要:其实出现问题的情况,只存在于异号两数想减使得结果超过了int型的最大或最小值,因此导致了符号位丢失。所以在这个基础上想到了转型。就是把int型转成long型的,那么符号位就保存在了第64位上了,同时也不会丢失符号位。贴代码(借鉴了一个网友的方法,用数组来存结果,这样就不用==比较符了。这个方法在Core Java中经常用到。):view plainprint?publicclassBigger{publicstaticvoidmain(Stringargs[]){inta=-2147483648;intb=2147483647;String[]strArray={"a>=b&q 阅读全文

posted @ 2012-08-19 19:39 AllenZhao 阅读(1596) 评论(0) 推荐(0)

各个实习公司面试题目
摘要:1:yahoo全球研发中心面试题目:A:n个信封对应n个邮箱,问至少有一个放对的概率是多少?(数学概率题)B:一个list,里面的每一个元素都是u=2x3y5z,其中x,y,z的取值都是从0到正无穷设计一个算法,找到第500个数据。这list里面的数值是按照从小到大排列好的。答案:把满足x+y+z=x那么,根据这个关系画出图来,看看占的面积是多少,占总的面积是多少,那么就可以算出概率来了。F:对于一个m×n的方格矩阵,从左上角走到右下角,只能向右或者向下走,一共多少走法?自己当时的解答:只是考虑向下走或者向右走在那些方格里就可以。2:搜狐研发中心1数据结构类题目:A:按层次遍历打印二 阅读全文

posted @ 2012-08-19 19:39 AllenZhao 阅读(335) 评论(0) 推荐(0)

不要被阶乘吓到
摘要:这一节有两个问题:给定一个整数N,那么N的阶乘N!末尾有多少个0?求N!的二进制表示中最低位1的位置。对于第一个问题,其实就是计算N!中有多少个质因子5,因为所有的0末尾的0都是5和偶数相乘产生的,而偶数出现的频率要远远高于5出现的频率,所以只要计算N!中又多少个5。最直接的向下面到的代码:intFunc1(intn){intcount =0;for(inti=n; i>0; i--){inttemp = i;while(temp %5==0){count++;temp /=5;}}returncount;}上面的代码复杂度很高,要降低复杂度可以对N循环的除以5的一次方,二次方……,直到 阅读全文

posted @ 2012-08-19 19:38 AllenZhao 阅读(143) 评论(0) 推荐(0)

位向量
摘要:位向量2011年2月23日22:52位向量和排序2009-04-14 17:44对于排序问题,想必大家都非常熟悉。而且,应该都知道基于比较的排序方法的时间复杂度的下界是O(n*logn)。尽管又出现了基数排序,使得排序类算法的时间复杂度改进到O(d*n),但是基数排序方法实现起来还是比较麻烦的。下面这种排序方法的时间复杂度可以认为是O(n),但是和基数排序方法相比,它的实现非常简单。为了介绍这种方法,需要对输入数据作如下假定:(1)都是非负整数,(2)每个整数最多出现一次,(3)最大整数小于n。这种方法采用哈希函数的思想,用一个整型数组array[n]来实现对输入数据的排序工作。具体点就是:( 阅读全文

posted @ 2012-08-19 19:34 AllenZhao 阅读(430) 评论(0) 推荐(0)

锦标赛算法
摘要:思路: K阶锦标赛算法例如:一个赛马场有100匹马,5条赛道,至少要比赛多少场才能选出跑得最快的10匹马?步骤:1. 将100匹马分成20次比赛,每次5匹马,并保存每次比赛的结果(即第1名到第5名的顺序)2. 从胜利的20匹马分成4次比赛,每次5匹马,并保存每次比赛的结果(即第1名到第5名的顺序)3. 对最后的4匹马进行比赛,并保存每次比赛的结果(即第1名到第4名的顺序)即通过以上3个步骤,其实已经建立一个4层的树结构。并且已经得到第1名A4. 在4层树结构中,挑出与A比过赛的且失败的,且是第2名的马(不超过5位),挑选出第2名B在此过程中,可以想象将A删除,并在比较过程中恢复树结构依次轮推, 阅读全文

posted @ 2012-08-19 19:27 AllenZhao 阅读(1502) 评论(0) 推荐(1)

海盗分宝石逻辑题目
摘要:问题描述: 5个海盗抢到了100颗宝石,每一颗都一样的大小和价值连城。 他们决定这么分: 1。抽签决定自己的号码(1,2,3,4,5) 2。首先,由1号提出分配方案,然后大家5人进行表决,当且仅当超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼。 3。如果1号死后,再由2号提出分配方案,然后大家4人进行表决,当且仅当超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼。 4。以次类推。 条件: 每个海盗都是很聪明的人,都能很理智的判断得失,从而做出选择。 问题: 第一个海盗提出怎样的分配方案才能够使自己的收益最大化?... 阅读全文

posted @ 2012-08-07 15:48 AllenZhao 阅读(258) 评论(0) 推荐(0)

13个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球?
摘要:对于这个题目,不知道那个球到底是轻还是重,只能在比较称重的过程中找出来。下面是思路:第一次称:左边4个右边4个(一)假如平衡, 那么很好办,坏球在剩下5个里。 这5个里面的3个出来,跟3个好球称。如果平衡,坏球在剩下2个球里,拿任意一个更一个好球称就可以。如果不平衡,坏球在拿出来的三个里面,并且按照这3个球和3个好球的结果,可以知道坏球是重的还是轻的。拿这3个位置球中任意2个放在天平两边,平衡,则剩下一个就是坏球,不平衡,则按照前面3个未知和3个好球的倾斜结果,就知道坏球是重的那个还是轻的那个。 那么,平衡情况下,剩下5个球里找坏球已经解决了。看零一种情况。(二)假如不平衡,设... 阅读全文

posted @ 2012-08-07 15:48 AllenZhao 阅读(883) 评论(0) 推荐(0)

骆驼吃香蕉问题
摘要:骆驼吃香蕉的问题 一共3000个香蕉,骆驼每次只能运送1000只,要送到1000里之外,并且骆驼每走1里要吃一个香蕉,问怎么走才能使剩下的香蕉最多。主要解决思路:①骆驼先载上1000个香蕉 走到某一处,然后放一些香蕉在路上某处。再带上一些香蕉 边走边吃返回到起点②重复上述过程,直到还剩余香蕉全部都搬运到路上某处.③最后重复①②过程现在的问题就出现了 走到某处? 到底走到哪里呢?一开始,有3000个香蕉 那么在通往终点的方向上的同一段路 要走3次该段路程反方向要走2次如果只剩了2000个香蕉 那么在通往终点的方向上的同一段路 要走2次该段路程反方向要走1次很显然 可以用剩余香蕉的数量来分隔。从. 阅读全文

posted @ 2012-08-07 15:47 AllenZhao 阅读(651) 评论(0) 推荐(0)

导航