笔试面试总结

把YouDao和Hulu的笔试面试总结一下,YouDao的笔试也是有出现经典的题目的,如过桥问题等,当时忘了标准的做法,直接枚举的。还有一个根据树的后序和中序来求出树的前序,当时挤不出代码,直接写的思路。最后一题不会做,题目是这样的,给你N种颜色,用这N种颜色的1*1*1的小立方体构造出一个长方体,使得各个颜色的小立方体是连通的(两个立方体面相邻就是连通),而且对于任意两种颜色X和Y,存在这两个颜色的立方体,它们是相邻的。并且要求构造出的长方体是最小的。

笔试做的不满意,但幸运地接到了面试的机会(电面进行),问了项目的经历及两道算法题,两道算法题答的还不错。HuLu这边的第一次面试是通过电面进行,由于人家招的是网络运维师,而我这方面没什么经验,所以网络基础就很差了,连7层模型都说不出来,只知道个大概,然后就是一些数学题和算法题了,问了不少的经典问题,N条直线最多划分多少个平面,N个锐角最多划分多少个平面,最长子序列和,这里提下两个算法题,觉得蛮有意思的,当时没有答满意的,有点可惜和遗憾:

  • 给个无序的N个整数序列,求出第K大的数。最笨的方法肯定是排序后,输出,那么复杂度是NlogN,当然这是不够的,我又想了个用K大的最小堆来维护序列中的前K大数,那么复杂度是NlogK,没降多少的复杂度。电面完了之后,我想到了之前用过树状数组的方法来做个类似的题目,可以先离散化这N个数,然后二分这N个数,判断序列中<=当前二分值的个数与K的大小关系来二分逼近,这样的复杂度就是O(N+logN*logN)了。记得POJ中有个加强版的K-th Number,有空的时候要去看看。
  • 有个按字典序放置的字典,大小是N,求出该字典中最长的词链,词链的定义是一个连续的单词表,使得前面的单词是后面单词的前缀,如ab,abc,abd那么词链就是ab,abc。最笨的方法很好像,复杂度是O(N*max_len(word)),在他的提醒下,电面完后才清晰,可惜了,可以这样做,用一个字典树来存放前i个单词,最单词末尾做标记,记录该单词的编号,每次在字典树插入当前单词的时候,在树上遍历,当符合这个条件时,记录最长词链长度,但走过的带有标记的单词词尾中的序号是连续的话,就更新,否则就不更新,这样下来就可以把复杂度降到O(size(dic))了。

还有很多不会,继续学习前行~

原文地址:https://www.cnblogs.com/litstrong/p/2084771.html