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

2016百度实习一面

时间:2016-09-15 09:55:18      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

总共有四道题,其他三道感觉比较简单,第一题记录单词个数,但是单词数量比较多,所以用map搞。第二题遍历树,得出树中每个节点的深度。第三题求单个lca。

最难的一题是一道思维题,给出n个数(n<=10^6),如果有两个数a,b,满足2*a<=b,则可以把数a装入数b中,每个数最多只能装一个数,问最多有多少个数可以被装?

举个荔枝:

假设现在n=5

这5个数为:4 1 2 8 9

我们先排个序得1 2 4 8 9

然后1->2,4->8则最多有两个数被装人。

这时很容易想到几种贪心策略,比如排序后,从最小的开始贪心,或从最大的开始贪心。

这里给出一组数据说明这种贪心是错误的。

n=4

1 2 4 7

n=4

3 5 10 20

然后来看下这个问题到底应该怎么去想。

首先,要找到一个关键性质,在排序之后,一定存在某个数x,使得最优解中被装入数在x的左边,装入数在x的右边。

接下来看图。

技术分享

 

2016百度实习一面

标签:

原文地址:http://www.cnblogs.com/chenhuan001/p/5874369.html

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