20141226-网易有道实习反思

  实习信息来源与反馈时间

  在应届生招聘网搜到的职位,然后按照相应的要求匹配了自己的简历,在邮件里自我简要地介绍了自己的基本情况。在投递大概一周之后HR回复约好时间去面试。(提前大概4天约的面试时间,准备时间还是有的)

  面试过程

  面试时间大概是70分钟左右;

  首先,面试官就简历让我做了下自我介绍,这一关基本上是开是话题,注意表达清楚,语言简练;

  接着,针对你所应聘的职位和所熟悉语言进行面试,因为我面试的是云笔记研发工程师,而自己擅长C++研发,所以主要就数据结构和算法面试。面试主要是三个题目:

  i. 在全国身份证系统内,给定某一具体身份证号码:XXXXXXXXXXXXXXX, 设计一个数据结构,能够在该数据库快速检索到这一身份证号;

  ii. 二维平面中有n个点,数据存储形式为Pi(xi, yi), 找到由两点组成斜率最大的两个点, 要求:时间复杂度尽量低;

  iii. 两个单链表(可能存在循环链表形式),判断这两个链表是否存在交点。

  题目整体是考察思维能力和基础需要自己有积累才能够快速地反应并作出解答。

  解法

  i. 根据身份证号码特征进行分段,设计多维数组实现快速检索。主要思想是根据索引号快速实现检索的数组结构时间复杂度为O(1);

  ii. 这道题比较难,真心是考察思维能力的。首先是建立模型,找到规律,然后在进行计算。最普遍的任意三点中可以排除什么类型的点对?(横坐标距离最远的两个点,如:A(1,2) B(2,3) C(4,5)  AC的斜率绝对比AB BC的小,可以排除),类推出只要中间(横坐标)存在点的两个点不可能是备选点集,只能存在于横坐标相邻的两个点之间,那么n个点就有n+1中可能,时间复杂度为O(n+1), 而这n个点对之间是无序的,需要根据横坐标进行排序,最快的排序算法是快排,时间复杂度O(nLogn)。最终时间复杂度为O(nLogn);[当然,最先想到的是暴力破解,时间复杂度是O(n^2),不过这显然没有达到要求,主要考察的还是你对这个规律的寻找和总结]

  iii. 计算链表长度(循环链表要特殊处理:去除循环),然后根据长度进行链表尾对齐,这样可以在O(n)时间复杂度情况下找到交点;


  反思

  认清自己实力,补足短板,发扬长处。多在平时积累demo和思考经验,这无论是面试还是处理问题都是很有用处的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值