中级农民
- 积分
- 110
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2016-9-28
- 最后登录
- 1970-1-1
|
本帖最后由 zjccpmh 于 2019-4-29 03:48 编辑
End of third week
周五面完了🐶家,估计挂了。把🐶家放在第一个面确实有点傻。
第一轮:
行人自行车的高频题。ref: https://www.cnblogs.com/lightwindy/p/9808666.html https://www.1point3acres.com/bbs ... 019%26typeid%3D1019
上来问 给 自行车在 (x1, y1), 人在(x2, y2)怎么算他们的距离。 写了个简单的helper function作为warm up。follow up里面会用到。
follow up:n个人 k辆自行车 n <= k, 找特定的人拿到自行车的最短路径使得所有人的最短路径和最短。注意: 输入可以用一个自行车坐标的array,一个人坐标的array已经target的人的reference。 我用的做法是把所有的人,车距离都求出来(新建了个distance 类),然后放在最小堆里面,一个一个pop出来。如果人/自行车已经visited,那么continue,继续pop下一个。说完思路后,面试官让写代码。
第二轮:
给你一个char[] 和一个
list of replacement {
int startIndex,
String original,
String replacement,
}
问你怎么把所有的replacement apply到char[]的这个document里面。问了面试官说需不需要inplace,面试官说inplace太难了,可以不inplace做。
inplace的思路应该是 step1: 扫描所有replacement,看整个document是变成还是变短。如果变长了扩展n个需要的额外space。
step2: 如果变长了,那么从右往左扫一遍array去apply replacment。(detail自己研究下吧)
我没用inplace的做,而是每一个replacement 把prefix + replacement + suffix (注意越界检查)
第三轮:
有个二维的格子,每个格子里面有一个对角线的挡板(either 左上到右下 or 左下到右上)问你从顶部某个格子扔个小球下去,小球最后会掉在什么位置。可能是掉在底边某个位置,可能是到左右边界某个位置( 比如到了右边界 \ |),可能是中间某个位置就卡住了 比如\ /。实现2个function:
1. 小球从位置i扔下去,返回最后的位置。
2. flip某个挡板,然后如何改变你存储的数据。
这轮面的最不好,往图搜索方向去想了,其实就是很简单的一层层分析左右邻居做几个if else 就好了。
第四轮:
把一个包含一堆int的数据压缩成几个最小的正数
比如[100, 20, 30] -> [3, 1, 2]
最小的数字,压缩成1, 20 -》1 30-》2 100-》3
follow up是数组变长二维。
第五轮:
有向图找包含某个点的最小环
面经里面,二分最优解,然后验证的马甲题很多,ex:
https://www.1point3acres.com/bbs ... 019%26typeid%3D1019
|
|