2018.09.05-依图网络科技有限公司-软件研发-校招

本次面试为电话面试,持续时间一个小时,面试官很直接,上来先做对他自己做了一个简单介绍,然后直奔主题,其实我们今天主要就做2道题目,第一道是回溯法解决的题,共享石墨文档编程序;第二道是分析时间复杂度的题目,只需要计算出结果,但是不需要编程序

个人认为现在的技术面试越来越看重时间复杂度的分析,尤其是在递归场景之下的的时间复杂度分析;另外就是手撕代码的功底,勤加练习才可以!

第一题

一个m*n的矩阵,中间的0表示海洋,1表示陆地,求最大的连续陆地面积,这里的连续指的是上下左右相邻的1,思路很直接,就是回溯法来做,很像《剑指offer》原题,具体如何做请参考我的另一篇博客,代码相似度非常高,这里就不重复了

写完代码之后,我向面试官解释了我的思路

Q1:该方法时间复杂度是多少? (我当时没答出来)

A1:O(m*n)?抱歉涉及到递归不太清楚是多少

Q2:如何进行优化,是否可以不要FLAG来标记?

A2:可以,这样的话需要修改输入的数组,把输入的数组访问过的位置标记为0 就可以,会改变原来的矩阵,if的判决条件也需要做一些修改

Q3:可否不用递归的方式?

A3:可以,需要用一个栈,每次把可以访问到的1加入栈中,然后标记为0,访问的方式一样,回到最开始的位置统计栈的高度就可以(貌似有问题)

第二题

对于一个vector数据结构,如果超出capacity内存,它的机制是再申请一块更大的内存,然后将原来元素复制过去,并且销毁最开始的内存,那么请问,如果我申请释放内存复杂度是O(1),复制n个元素复杂度是O(n),我目前capacity大小是1,每次内存不够我申请内存大小为原来的2倍,问插入n个元素的时间复杂度

分析:这道题最后面试官说答案是O(n),我后来分析了一下,却是如此,复制所需要的次数为:1+2+4+8+...+2^(logn + 1),其实是个线性复杂度,然后申请内存的复杂度是logn,二者最后是求和的关系,所以是O(n),这道题我还是想了一会儿的,在面试官的提示之下基本得到正确的结果,感觉这部分还需要加强

最后让我问一些问题,随便聊了几句,面试官人很不错,然而我太菜,还是要加油!!!!

猜你喜欢

转载自www.cnblogs.com/dapeng-bupt/p/9594375.html