贝壳找房的一道题---大橘为重---做不出来了
这道题怎么做都超时。。。。 要求 C++ 1s 内存 小于 256M 。
小
新买了一些橘子,每个橘子都有一个重量,但是小
的强迫症使得她希望这些橘子的重量之和恰好为
。
为此小
可以进行若干次“筛选”(也可以不进行)
每次”筛选“包含以下两个步骤:
1.计算现有橘子重量的平均数并且向下取整,记为
2.选择抛弃所有重量大于
的橘子或者抛弃所有重量小于等于
的橘子
例如:输入:
5 3
7 1 2 5 6
3
21
30
则输入:
YES
YES
NO
解析:
5个橘子, 3种要求。
要求3时, 7 6 5 2 1 平均值4, 小于4的是2和1,正好是3;
要求21时,所有橘子加起来是21,正好;
要求是30时,不够了,所以NO。
我的思路:
递归。
假设 判定函数是 check() , 橘子用vector装起来,做完一些边界判定后,将橘子分别装成 less 和 more 两个 vector,然后递归调用 check(),只要有一个返回true,就是true 。
关键代码:
bool check(vector<int> oranges, int ask)
{
/*边界判定代码 略,提升效率*/
vector<int> less,more;
for(auto x : oranges)
{
if( x > avg)
{
more.push_back(x);
}
else
{
less.push_back(x);
}
}
return check(less,ask) || check(more,ask);
}
结果内存超了。
将入参vector,提前排序,然后改为 iterator,结果内存不超了,时间超了。
有没有大神可以给一个办法的? 原题地址(第3题):