码迷,mamicode.com
首页 > 其他好文 > 详细

今日头条&58转转笔试

时间:2017-08-23 13:47:53      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:size   选择   数列   大神   问题   编码   最小   突破口   16px   

昨天参加今日头条和58转转的笔试,因为时间上有冲突,所以主要选择参加头条的笔试。

 

先说头条:

 

头条的题型:

一道改错题

三道编程题

一道设计题

 

感受:

做题目的的时候还是有点紧张的,因为突然遇到题目需要思考很长时间,而且不确定是否正确时,真的是着急。

做完头条笔试感觉真是好大差距,有大神三道编程全部AC,而我三道编程只能50%,0,0;

改错题一上来有点懵,半个多小时,最后还不知道改的对不对。

设计题基本是用一个套路来回答的,也不确定,但肯定不完善。

被虐的体无完肤。

 

 

下面主要记一下编程题:

第一题有思路,但是不知道哪里出的问题,最后只有50%通过。后来了解到,可能是输入输出使用cin/cout所致,在数据量比较大的时候使用scanf和printf效率会比较高。

但是第一题花费了过长的时间,大概接近50分钟。真的需要多写代码,熟练基本容器的使用。不然在写的时候,就会发现自己的代码上真的还是存在很大问题的。容器,迭代器。

第二题,因为只剩下十几分钟,刚开始题目都没有理解透。最后才读明白,可以用线段树。

第三题,直接没有时间去看。

 

下面贴一下大神的思路:

作者:Ck0123 链接:https://www.nowcoder.com/discuss/33986 来源:牛客网

(1)第一题:给一个二维平面,而且横纵坐标都不会重复(简化了排序),要求“不存在左上方还有点”的点集。因为数据量最大是50W,所以基本上用是O(nlogn)的方法解决。
首先按x坐标排个序(因为y不重复所以不用管),然后从后往前(此时保证当前点的x是比后面的x要小的),记录一个当前最大的Y,如果当前这个位置的y比Y还要大,那么明显这个位置的“左上方”不可能有点了。问题解决。
 
(2)第二题:一段长度是50W的数列,找一段区间,使得:这段区间里的最小值*这段区间值的总和 最大。换句话说就是:min*total是全部区间里最大的。
其实这样的题方法肯定有很多,但是突破口是一定的:从这个最小值入手。枚举这个最小值,然后问题就变成“怎么找这个数前面(和后面)第一个比它小的数的位置”,这个线段树可以解决。好像倍增也可以。当然还有别的方法只要是O(nlogn)肯定都是可以的。
 
 
(3)第三题:其实就是一个模拟不过是带优先队列的模拟,因为C++、Java都是自带优先队列的,所以问题不大。将程序员(因为哪个程序员做其实不重要)按目前手头上的idea实现结束时间加入一个优先队列(按结束时间来排序的),然后枚举当前的时间(从0到10000吧,假设),如果到了idea的“提出时间”,将它加入这个hr单独的优先队列里(idea要按照题目要求先排序),每个时间点都查询有没有空的程序员?有没有idea需要执行?按照这种思路大概就可以了。<!--说起来容易做起来难-->

 

总结:对于容器的使用要很重视,经常遇到同一类型需要用到pair容器的题目;

          要提高编码的速度和质量,对于第一个题目,因为粗心可能浪费了有二十分钟调试。思路没有问题,都花在改代码上。。。

          面对这样的编程笔试题目,一般,我觉得一道题目花费时间不应该超过25分钟。所以,当你在一道有思路的题目上花费超过半小时,那就说明你编码功底不够。

          另外,面对题目吐过没有思路,说明对与常见算法与题目熟练度不够,需要多加练习。

 

实现代码,陆续补上!

 

下面再说58转转。

      

今日头条&58转转笔试

标签:size   选择   数列   大神   问题   编码   最小   突破口   16px   

原文地址:http://www.cnblogs.com/Allen-rg/p/7417412.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!