常见面试算法问题

1、现有1千万个指针,选出其中重复的。

   答:利用哈希算法(将任意长度的二进制映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值)将指针值简化,再进行比对;

2、从n个元素中选出最大的m个。

   答:1)、先排序,选出前m个;

           2)、随机选m个值建立一个小顶堆,其他的值和堆顶的数据比较,比堆顶小的舍弃,比堆顶大的值重新编排次小顶堆(去掉堆底的最小值),依次读入所有数据,最终得到的那个小顶堆的m个值既是所要的值;

           对于这两种方法,如果数据量不大的话,可以选择第一种方法,耗时较少,如果数据量比较大的话,由于第一种方法需要一次读入所有的数据,会消耗大量内存,因此第二种方法相对较好;

3、现有20000个单词,其中某些单词是字母重组得到的(wordwrodwodrdowr),请找出这样的词。

   答:将每一个单词按照字母表顺序排列,这样题目中要求的单词就会变成相等的字符串,在进行比较;

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);
}

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值