2014网易游戏测试工程师面试题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、返回两个有序数组合并后的第K个的数。
思路:折半查找法
分别找两个数组中的第K/2的位置的元素(假设数组中的元素下标从1开始),然后进行比较,较小的则前K/2个元素可舍弃,不用考虑(因为他们必定比第K个数小),接下来在剩余的元素中找第(K-K/2)个数,依次类推。如果某一个数组到头了,就直接从另一个数组中取出指定的数。
举例说明,
A={1,3,5,7,9}
B={2,4,6,8,10}
K=5,
首先令剩下需要找的元素个数为 left,初始化为left=5;
折半的位置mid=5/2=2;
(假设下标从1开始)
A[2]=3,B[2]=4,A[2] 现在,
A={5,7,9}
B={2,4,6,8,10}
接下来,就要在A、B中要找第(left=left-mid=5-2=3)个元素;
left=3,mid=3/2=1;
A[1]=5,B[1]=2,A[1]>B[1],那么B的前mid(mid=1)个元素可以不考虑,那么,
A={5,7,9}
B={4,6,8,10}
接下来,就要在A、B中要找第(left=left-mid=3-1=2)个元素;
left=2,mid=2/2=1;
A[1]=5,B[1]=4,A[1]>B[1],那么B的前mid(mid=1)个元素可以不考虑,那么,
A={5,7,9}
B={6,8,10}
接下来,就要在A、B中要找第(left=left-mid=2-1=1)个元素;
找第1个元素很简单,只要比较A,B的第一个元素就可以了,哪个小就是哪个。
A[1]=5,B[1]=6,A[1] 同样,如果K=10,要找第10个元素,那么就将A[5]与B[5]进行比较,发现A[5] A={}
B={2,4,6,8,10}
left=5,
那么就可以直接从B数组中提取第5个元素10,即,要找的元素就是10.
2、判断带头结点的单链表中是否有环。
判断一个单链表是否有环及环的链接点
主要思想:追赶法,采用两个指针,快指针每次走两步,慢指针每次走一步,当两个指针相遇,就表示有环。
这里面试官提出了一个问题,为什么不是一个走4步,一个走3步。当时被绕进去了没想明白,其实拿笔画一下就明白了,
两个指针一个走4步,一个走3步也可以,最终也能找到环,但是可能要走好几圈两个指针才能相遇。而采用一个走2步,一个走1步,快指针走一圈或一圈多一点(不到两圈)就可以与慢指针相遇。
总结的一点心得就是,面试官并非总是引导你找到正确的方法,有时候也会误导你,让你的思维比较混乱,所以时刻要保持清醒的头脑,思维要清晰,当有些混乱的时候,就要从头理一理,多动笔。我想面试也是一场博弈吧,希望下次好运!

3、箱子里面有一百个球,甲和乙分别拿球,每次最少一个,最多5个,拿到第一百个球的人获胜。若甲先拿,请问他第一次要拿几个,怎么保证他能拿到第一百个球。
思路:反向递推法
要拿到第100个球,必须保证拿到第94个球,
要保证拿到第94个球,必须保证拿到第88个球,
依次类推,
每次都要保证拿到第100-6*N个球,
最小是100%6=4个球,(100对6取余为4)
那么最开始要拿4个球。后来每次确保拿到的个数与乙拿的球的个数和为6.比如,乙拿1个,甲就拿5个;乙拿2个,甲就拿4个,依次类推。
总结一下,一般式:如果N个球,甲和乙分别拿球,每次最多拿K个,最少拿一个,甲先拿,要确保甲拿到最后一个球,那么,甲第一次就要拿(N%(K+1))个,后来每次确保与另一方拿的球的个数和为(K+1)个。
另外,还问了一个问题,面试官问我桌子上的那个装抽纸的木盒子还能用来干什么,发动你的思维充分想象一下。这个问题见仁见智吧!主要看思维够不够活跃,够不够创新!

相关文档
最新文档