首页 > 代码库 > 2016百度实习一面
2016百度实习一面
总共有四道题,其他三道感觉比较简单,第一题记录单词个数,但是单词数量比较多,所以用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百度实习一面
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。