总共有四道题,其他三道感觉比较简单,第一题记录单词个数,但是单词数量比较多,所以用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的右边。
接下来看图。
时间: 2024-12-24 08:28:57