C++ Dev 90min 9题

前面6题选择,https://pan.baidu.com/s/1o8jUMrK 参考这个,另外一道题是struct A: struct B{}, A,B什么关系

3道coding: http://www.1point3acres.com/bbs/thread-293013-1-1.html

LZ很悲催,做到最后11分钟,点submit一道题,结果卡住了,刷新网页了后就进不了考试页面了T.T 妥妥的跪了


6道单选 + 3 道coding

单选:记不清了。基本考了 c++ stuct 继承的一些概念,还有variable定义时那些存heap, 那些stack。inline的功能。有的答案比较明显。

coding:没做完,脑袋转得太慢了。。。基本确定跪了

补充内容 (2017-9-17 05:12):

第一题:给一个map<string, int> 和一个string s. 让你找出map所有key里以s作为前缀的value的和。

补充内容 (2017-9-17 05:14):

第二题:lc198。线性dp。题目说法挺绕的。其实本质还是一样的。。。

补充内容 (2017-9-17 05:19):

第三题:给一个迷宫。二维数组表示。-1是墙,1是金子,0是可以走。要求从左上角走到右下角再走回左上角。求最多可以拿到多少金子。金子只能拿一次,相应的格子就从1变成0了。一遍dfs就可以解决。


OA: 似乎OA的题目是按月份的。不过总体感觉OA是三个流程里最难的一个环节,三道代码题,第一道是一个trie,第二道是一道dp,第三道是二取方格(dp/费用流)。

第一轮面试: 提供api,写一个ping-pong的系统,返回round trip time(大概就是server client之间发送请求), 感觉如果有network经验,对于调用api比较熟练的话(比如app,java,go,py的tcp的经验),读懂api后10分钟就可以搞定。

第二轮面试:第二轮内有两位面试官,各30min,第一位面试官主要问了各种system programming的知识,包括内存管理,进程, 线程等。第二位主要问了linux和c++ programming的知识(包括继承多态等)。

面试过后一周收到offer


1-6题是单项选择,非常简单,2分钟就可以搞定的那种。

7 coding,也是很简单,10行代码以内搞定。

8 coding,给一数组,例如[1, 2, 2, 1, 3, 3],当取出一个数Ai时,可以得到Ai * count(Ai), 同时Ai + 1, Ai - 1, 不能再被选,如取出1时,可以得到 1 * 2, 但是2和3都不能在选,求能得到的最大的值。

我是先存到一个Hahsmap里,然后dp的。解法与house robber那道题很想,如果取当前的数i, 则i-1不能取,状态方程大概就是dp(i) = max(dp(i-2) + a(i), dp(i-1)) 类似House Robber,注意用long类似否则会overflow。

9 coding,给一个map,里面有0,1,-1的值,0和1代表能走,1代表得一分,问从左上角走到右下角再走到左上角最多能得多少分,当走过一个1时走回来不能重复加,第一遍只能&#128073;或者&#128071;,第二遍只能&#128072;或者&#128070;。

我用的DFS,有一些test case会TLE。Drawbridge的OA也有一道一样的题,听说可以用dp二取方格的做法,无奈楼主渣渣实在搞不定。


第一题:Prefix Map。给你的是一个unordered_map,key=string, value=int,求出HashMap里面所有以prefix开头的string的value。我的做法是把词条都存到一个ordered_map(在java里应该是叫做TreeMap)里,然后Traverse

第二题:Burst array。一个Array里面都是integer,你可以remove掉里面所有出现的一个数,并且积累所有该数的和到积分中(即数*出现次数)。但是如果这么做了,你就得把array里面所有的该数+1和该数-1 remove掉但是不积累积分。Given an array,问最多能得到多少积分。我的做法是DP建一个二维数组,其中dp[i][j]表示subarray(i,j)所能积累到的最大的积分。只是可惜有几个Test case没有过,可能有corner cases 需要考虑。

第三题:Diamond mining。给一个二维数组,里面有-1表示墙不能通过,其他数都是大于等于0表示格子的钻石数量。从左上走到右下再从右下走到左上,问最多能捡多少钻石。前提条件是从左上到右下只能向下或者向右走,从右下到左上只能向上或者向左走,而且钻石不能重复捡。我的做法是第一遍DP左上到右下,然后backtracking把第一遍最优走法中捡到的钻石清零,接着再来一遍DP从右下到左上,可是还是有Test cases没过。


results matching ""

    No results matching ""