贝壳找房的一道题---大橘为重---做不出来了

这道题怎么做都超时。。。。 要求 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题):


全部评论
排序 预处理前缀和数组 二分av***判断😅试试看
点赞 回复 分享
发布于 2022-01-30 13:15
因为橘子是固定的,可以先算出所有可能的结果。 后续输入直接判断在不在结果里就行了,免得每次都要重新算
点赞 回复 分享
发布于 2022-04-14 22:28
大佬请问华为od是干嘛的,我这有机会不
点赞 回复 分享
发布于 2022-01-30 13:16

相关推荐

点赞 评论 收藏
分享
03-30 19:30
石家庄学院 Java
野蛮的柯基在游泳:都能入股了,还得是Java
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务