问答

当前位置

求教两天前Amazon OA的一道题

  • Ta: 添助教

前两天刚做了一个Amazon OA,一共两道编程题。第一道题题干啰嗦了半天,其实就是K closest points的内核,原题不多说了,主要是第二道题。

题目先要求根据数据顺序生成binary search tree,然后给两个数据,node1和node2,然后返回两个node之间的距离。比如数据是 { 5, 3, 6, 1, 2, 4 },然后给两个数值2和4,那么返回值就是3。

两个思路,一个是在创建binary search tree的时候,除了left和right指针,加一个parent指针,然后查找node1这个值在tree的位置,从这个位置开始BFS,分层遍历parent,left和right,然后找到node2这个值的时候,返回层数。

另外一个我想到的就是树创建好之后,找到node1和node2的最近公共祖先,然后从这个祖先开始分层遍历,分别记录两个值的层高,相加就是距离。

不知道这个是不是也有原题,反正我暂时还没有刷到。想请问除了这两个方法,有没有更好的解法呢?这两种方法,哪种更好呢?

我自己做题的时候,首先想到和选择的就是这个方法,但是由于BFS在计算层数的时候,level++写在了最前面,而不是写在后面,导致最后层数从1开始,非0开始,最后的结果都比期望值多了2。最后想到bug想要修改时,因为只剩30秒,太紧张点到了鼠标,好死不死点到Exit,直接退出回不去了。第二题的test cases应该除了返回-1的能对,其他都错了,应该OA直接挂了,容我伤心一下。。。

经验教训总结:最近一直在练习BFS,两道题都用到了,觉得还是很重要的。然后对于最开始最基本的分治算法却忽略了,没有练习到纯熟,导致在正确创建BST和找最近公共祖先上花了比预期多很多的时间,所以基础还是要打牢啊!在这里对令狐冲老师面壁反省一下 T_T 然后就是开始求职以来第一个OA面试,太紧张了,还是应该放松一点,对自己自信一些。希望这些经验教训能给大家一些帮助!

1 个回复

2017-10-12 陆助教

用node1和node2的最近公共祖先来求路径长度比较好
因为树结构不一定会给你prev指针,你想要用的话需要再重新建一棵树,这样的话消耗更高

我来回答

您没有权限

为提高问答质量,问答版块发言权限只向九章学员开放

登录 注册

© Jiu Zhang 2013-. All rights reserved. 京ICP备16004690号-1