面试中的LCA问题

时间:2010-12-26 14:05:21

标签: algorithm least-common-ancestor

有时我会遇到像this这样的面试问题:“找到树中任意2个节点的共同父级”。我注意到他们也在谷歌,亚马逊等地提出了LCA问题。

维基百科says LCA可以通过从给定节点到根的路径的交集找到,它需要O(H),其中H是树的高度。此外,还有更多高级算法可以在O(N)中处理树,并在O(1)中回答LCA查询。

我想知道访问者究竟想要了解候选人提出这个LCA问题的原因。路径交集的第一个算法似乎微不足道。他们是否希望候选人记住预处理算法?他们是否希望候选人能够即时发明这些算法和数据结构?

2 个答案:

答案 0 :(得分:9)

他们希望看到你的成就。他们想看看你的想法,你如何解决问题,以及处理截止日期的压力。我想如果你因为已经知道解决方案而解决了问题,那么他们只会给你带来另一个问题。这不是他们想要的解决方案,而是你的大脑。

答案 1 :(得分:2)

在面试中有很多算法问题,我不在乎(或想要)你记住答案。我希望你能从你所知道的主要原则中得出答案。

现实地说:如果你能够快速构建答案,如果你已经知道“如何做X”的答案,我可以减少两件事。最终:在现实世界中,我不一定认为你有解决域X问题的经验,但如果你在所述域中遇到问题,我当然希望你有分析能力来找出合理的答案,基于你掌握的一般知识。

树是一种常见的数据结构,可以安全地假设大多数人都知道 - 如果你知道答案,你应该能够解释它。如果您不知道答案,但了解数据结构,您应该能够轻松地得出答案。