为什么最难不过二叉树的算法出现在面试题中都会被应聘者抱怨?

因为大部分面试者都很水啊。我们想用一个比较简洁、省力的方法筛选好的候选人。在面试中,区分度是最重要的。


这个问题让我想起了早期在美国求职被拒的经历。

当时一个不修边幅的亚裔小哥哥(一看就感觉像 nerd)问了我这么一道题:

reverse a linked-list using by using a iterative way

我当时还非常稚嫩,非常生气,想着出这种题的 point 在哪里?还想着和面试官 argue 一下。后来的结果可想而知。


首先我们来看一下这道题,如果用最简单的 recursion 来做,差不多是这样

// pseudo code

function reverse(root, newHead){  

  if(!root){    

    return newHead;  

  }

  next = root.next;  

  root.next = newHead;  

  return reverse(next, root);

}

然后来分析一下时间复杂度,和空间复杂度。

因为只可能遍历所有 n 个节点,所以 time complexity 为 O(n)。

因为 recursion stack call,这里会调用 n 次,所以 space complexity 为 O(n)。


那么有没有更好的解法呢?

// pseudo code

function reverse(root, newHead){

  newHead = null;

  while(root){

    next = root.next;

    root.next = newHead;

    newHead = root;

    root = next;

  }

}

这么解就会好很多,因为没有 recursion stack call,所以 space complexity 为 O(1) 即常数。算是非常大的提升了。


就这么简单的一道题,基本上有 2-3 个区分度。

1)会不会基本的 CS 基础。

2)会不会准确的说出时间/空间复杂度。

3)会不会优化。


所以你看我当时连基本的第 1 个度都没达到,可不就挂掉了呢。


最后我想说,在我目前的工作中还真用到不少 recursion 等相关 CS 基础内容。那些说『面试造火箭,工作拧螺丝』的大概是没有想去探索真正附有挑战的工作吧。


只有自己不断地去探索、不断去超越自己才有可能一直进步。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • <center>#104 Maximum Depth of Binary Tree</center> link D...
    铛铛铛clark阅读 5,530评论 0 0
  • 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不...
    曲终人散Li阅读 8,645评论 0 19
  • <center>#51 N-Queens</center> link Description:The n-quee...
    铛铛铛clark阅读 4,631评论 0 0
  • Python语言特性 1 Python的函数参数传递 看两个如下例子,分析运行结果: 代码一: a = 1 def...
    伊森H阅读 8,210评论 0 15
  • 今天早上在QQ群里看到一个小伙伴发的一个微信文章,可以算是毒鸡汤吧,但我认为写的非常好,引起了我的共鸣。 以下摘录...
    007_6103阅读 981评论 0 0