jike2012年5月实习题

1、  输出hanoi塔的中间移动过程,复杂度

Hanoi比较简单,时间复杂度是O(2exp n)(why?)

2、  给您一个二叉树(元素值都是int类型),输入整数a,b,计算二叉树中在[a,b]区间的节点个数。

A:遍历过程(先序遍历、或者中序遍历、后续遍历)。

3、  判断两个字符串是不是同性异构体(长度一样,相同的字符组成,字符个数也一样,字符位置不一样)

A:建立2个数组COUT1[256],COUT2[256],记录char * str1和char *str2的每个字符出现个数,然后比较2个数组是否相等。

4、  整形数组里面,返回出现次数大于一半的元素(编程之美)

A: 介绍一个时间复杂度为O(n)的算法。

每次删除2个不同的元素,剩下的元素里面,之前出现次数大于一半的元素现在出现次数也是大于一半。

5、  128bit的二进制流里面查找8bit二进制流出现的次数

A:我的理解是,二进制流其实就是一个字符串。利用KMP算法计算。

6、  如下图所示,红色矩阵为一个运动物体,可以在水平方向移动,地底下有陷进(黑色)

运动物体每次运动步伐只能是自然数的平方(table[]存放,1,4,9,16,25,。。。),求给定initPos,goalPos,和holePos[]数组,怎么计算移动的最少次数

水平轨道

 

 

 

 

 

 

 

 

 

地下是否有陷阱

 

 

 

 

 

 

 

 

 

水平轨

道坐标

-3

-2

-1

0

1

2

3

4

5

A:

1)      算出initPos和goalPos之间的距离len

2)      再在table数组里面寻找一个最接近len的数,table[A1],剩余距离为:

Len[1] = (len – table[A1] )(可能为负数,负数的时候下次运动方向为:终点—>起始点)

3)      再在table数组里面寻找一个最接近len[1]的数,table[A2],剩余距离为:

如果len[1] >0,len[2] = (len[1] – table[A2] )

如果len[1] <0,len[2]= (len[1] + table[A2] )

(可能为负数,负数的时候下次运动方向为:终点—>起始点,正数的时候下次运动方向为:起点—>终点)

4)      循环步骤3,直到len[n] = 0,这样移动次数为n


你可能感兴趣的:(jike2012年5月实习题)