匡恩面试题

1. A、B两个人轮流往一张大圆桌上放硬币,硬币不能出桌子界,不能重复,直到最后一个人没地方放下一块硬币则游戏结束,没地方放硬币的那个人输了;A先放,请问A按照怎样的策略可以保证总是A获胜。

   解答:A首先在圆桌的正中心放一枚硬币,然后B开始放,A每次在B对称的地方放硬币,这样可以保证最后能放的硬币总数是奇数

2. 有4个人A、B、C、D过独木桥,4个人过去速度快慢不一,A需要1分钟,B需要2分钟,C需要5分钟,D需要10分钟,现在只有一盏照明灯,而且独木桥每次最多只能过2个人,

过去的时间取决于最慢的那个人,请问过桥最短时间

   解答:最短时间17分钟。策略如下:AB先过去一趟2分钟,然后A带着灯回来1分钟,CD再带着灯过去10分钟,B再带着灯回来2分钟,AB再一起过去2分钟,总共17分钟。

3.有一个字符数组如 “I come from China”,现在需要把字符串按单词顺序反转,即变成 “China from come I”, 请找出最节省内存的方式

   解答:先把整个字符串反转变成 “anihC morf emoc I”, 再针对反转后的字符串把每个单词反转变成 “China from come I”即可

4.有一个很大的byte数组,现在要算出所有byte字节包含的1的位的总数目,最快的求解方法

  eg: byte[] aa = {(byte)1,(byte)3} 就是00000001、 00000011总共3个为1的位。

  解答:在内存中生成一个256大小的数组,数组里面每个元素的内容即为数组对应的索引包含的1的位的数目,生成这样一个byte数组以后,接下来计算所有的1的总数,遍历整个               byte数组,以每个元素为索引,找到之前生成的byte数组中的元素的值,即为这个byte包含的1的个数,累加即可得。

5.单链表找环。

   解答:这个问题在网络路由上经常遇到的非常经典的问题, 可以用2个指针,一个指针一次性前进2步,一个指针一次性前进1步,这样2步的指针每次比一步的指针多出来一步,                  只要存在环,则2步的指针必然会与1步的指针相遇,此时刚好比1步的指针多走一圈(每次比一步的指针多出来一步)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值