1、现有1千万个指针,选出其中重复的。
答:利用哈希算法(将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值)将指针值简化,再进行比对;
2、从n个元素中选出最大的m个。
答:1)、先排序,选出前m个;
2)、随机选m个值建立一个小顶堆,其他的值和堆顶的数据比较,比堆顶小的舍弃,比堆顶大的值重新编排次小顶堆(去掉堆底的最小值),依次读入所有数据,最终得到的那个小顶堆的m个值既是所要的值;
对于这两种方法,如果数据量不大的话,可以选择第一种方法,耗时较少,如果数据量比较大的话,由于第一种方法需要一次读入所有的数据,会消耗大量内存,因此第二种方法相对较好;
3、现有20000个单词,其中某些单词是字母重组得到的(如word、wrod、wodr、dowr),请找出这样的词。
答:将每一个单词按照字母表顺序排列,这样题目中要求的单词就会变成相等的字符串,在进行比较;
4、招行笔试:上楼问题,假设一次可以上一层台阶,也可以上两层台阶,求上n层台阶一共有多少种方法;
分析:很明显,n=1时,有一种方法,n=2时有两种方法,n>2时,考虑递归思想,上n层台阶可以分为两种情况:若第一次上一层台阶,则后面需要再上n-1层台阶;若第一次上两层台阶,则后面需要再上n-2层台阶,即:
代码如下:
int getsteps(int n)
{
if (n == 1)
{
return 1;
}
if (n == 2)
{
return 2;
}
return getsteps(n-1)+getsteps(n-2);
}