记腾讯创新班面试

昨天参加了腾讯创新班3+1的面试,觉得收获匪浅,腾讯果然很多大牛啊。废话少说下,记一下面试时候几个有趣的问题,第一个是:

 

 

//代码一
for(int i = 0 ; i<N ; i++){
 
     A;
     B;
     C;
}

//代码二
for(int i = 0 ; i<N ; i++){
     A;    
}

for(int i = 0 ; i<N ; i++){
     B;
}

for(int i = 0 ; i<N ; i++){  
     C;
}

 

 问题是,在什么情景下会出现代码一比代码二快执行完,在什么情况下代码二比代码一快执行完?

答案一:线程阻塞可以达到代码一比代码二更快执行完的效果。具体一点说就是A语句是启动的一个线程ThreadA,然后ThreadA在运行的过程中受到阻塞。由于只是线程ThreadA受到阻塞,对主线程没什么影响,主线程会继续执行下去。所以代码什么时候执行完取决于最后一个启动的ThreadA的结束时间。由于二中的最后一个的启动时间比一中的早,顾可以出现二比一块执行完得情况。

答案二是:A,B,C分别都是读取文件的操作,在这种情况下代码二的效率会比代码一的效率高很多

答案三是:A是i--;B是i++;在代码二中形成了死循环,所以一会比二快

 

 

问题二:

一个长字符窜和一个短字符串,判断短字符串中的所有字符是否在长的字符窜中。

答案是:

一:直接遍历,效果比较差

二:把所有的长字符窜的字母存进一个hashmap中,再用段字符窜的所有字母去hashmap中的去找。由于字符串很长,所以中间必然很多重复字母,用hashmap存储去除重复字母,并且查找效率很高,所以这个算法效率较高。

三:把长字符窜的所有字母存进一个set中,记录set中元素个数a,再继续把短字符串的字母也放进set中,在记录元素个数b,比较a,b就可以得到结果。

四:用一个01的窜记录每个26个字母在长窜中字母是否出现的情况,然后遍历短窜,可以通过短窜中的字母,找到对应的01位置,判断短窜的字母是否在长窜中。这种的查找效率和比hashmap高,而且节省空间。

 

问题三:

有一百个阶梯,一个人每次可以走一步或者两步,一共有多少种走法?

答案一:用动态规划的方法,声明一个int result[101]的数组,用result[n]来存储当有n级阶梯时,一共有多少种走法。可以result【0】=0,result【1】=1,然后result【n】=result【n-1】+result【n-2】

答案二:用排列组合的方法。很容易可以得出走一步的次数x和走两步的次数y,然后可以用排列组合的方法计算出来

 

以上的答案如有不对,请各位大牛们批评指出。或者如果大家如果有什么好的想法也可以分享一下

 

总结:感觉腾讯的面试由浅到深,逐渐深入,要你不断优化你的代码,很考发散性思维。虽然顺利通过了三面,但是自己还有很多不足之处,很多地方还要提高。在等通知中,希望可以通过吧。God bless me 。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值