腾讯面试题解答

看到July大神收集的面试题目,看了几道做出解答。

 

 

腾讯七道面试题


27、请定义一个宏,比较两个数ab的大小,不能使用大于、小于、if语句

 

      下面是网络上某博客给出的答案,他的宏定义没有加括号,我给加上了:

     

      上面的宏定义很巧妙,但是没有考虑到溢出的情况,当A为很大的负值,B为正值的时候,两者的差由于溢出变成正数,导致得到的较大值为A

比如:当A = -2147483648,B = 1时,A-B 溢出,截断后得到的结果是2147483647,本应该是负值,变成了正值,结果错误。

      下面是一种改进:

     

      我自己的定义是这样的:

       

      宏_SIGN用来与值做与操作,可取得符号位,((A)&_SIGN)^((B)&_SIGN)表示 A的符号位和B的符号位做异或,也就是对A、B同号异号的情况做处理。异号,正者大;同号,判断差的符号。


28、两个数相乘,小数点后位数没有限制,请写一个高精度算法

 

29、有ABCD四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时12510分钟,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥?

     老题目了,17分钟,很明显10分钟的和5分钟的要一起过去,而且只能走一遍,手电筒只能由1分钟的或者2分钟的带回来,方案如下:

  1.       1分钟和2分钟的过桥, 1分钟的回来          耗时:3分钟
  2.       5分钟和10分钟的过桥,2分钟的回来         耗时:12分钟
  3.       1分钟和2分钟的过桥                            耗时:2分钟

30、有12个小球,外形相同,其中一个小球的质量与其他11个不同,给一个天平,问如何用3次把这个小球找出来,并且求出这个小球是比其他的轻还是重

31、在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可。

       刚开始想用位图就行,后来发现中位数得考虑同一个数出现的次数。如果用归并排序的话会做大量无用功。只能用整型值来计数了,统计前5G+1个数,取第5G个和第5G+1个。

http://blog.youkuaiyun.com/lyso1/archive/2010/05/10/5573714.aspx写得很详细,只不过有64位能表示的远大于8G的数。

      

32、一个文件中有40亿个整数,每个整数为四个字节,内存为1GB,写出一个算法:求出这个文件里的整数里不包含的一个整数

       跟《编程珠玑》的题有点类似,如果是有序的话,可以采用二分法,读取值的中点,看之前的值的个数是否小于自身,如此递归。

       这道题没有提及有序,用位图,40亿个刚好差不多需要4G/8 = 512M。

33、腾讯服务器每秒有2wQQ号同时上线,找出5min内重新登入的qq号并打印出来。

       5分钟内登陆的QQ数为5*60*2W = 6M。也是用位图,只不过是用两个位表示一个数,

0表示未登录,1表示登陆一次,2表示登陆多次。不过QQ号好像12位啦,超过int了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值