题目描述:
动物园有猴山,每天需要给猴子们发香蕉,猴子会排队依次取食。输入描述:
猴子们铺张浪费,会多拿食物,但最多不会拿超过自身食量的二倍且不会超过当前还存在的香蕉的一半,最后一个猴子除外(即最后一个猴子可以拿完剩余的所有香蕉)。
最少需要准备多少香蕉,能保证所有猴子都能吃饱?
【算法|字节跳动21春招第三场笔试算法题】一个数组,每一项表示一个猴子的食量猴子数量范围是1~200示例:
输入:
[4,3]输出:
8
思路:使用动态规划方法从后向前推,dp数组保存推出的后i只猴子所需的最少香蕉数
publicint monkeyEatBanana(int[] monkey){
int n = monkey.length;
int[] dp = new int[n+1];
//dp[i]代表后i只猴子吃饱所需最少香蕉数
dp[1] = monkey[n - 1];
for (int i = n-2;
i >=0 ;
i--) {//版本一:假设猴子可以拿半个香蕉
if (monkey[i]
推荐阅读
- 算法|字节跳动2019春招研发编程题
- java|Java——字节跳动2019春招研发部分编程题(一)
- 软件测试|软件测试3个月学习,终于找到工作了,面试总结分享给大家
- 软件测试|Postman 是个好用的工具,不试一下()
- Android|Android 知识点 030 —— Handler,Thread,HandlerThread
- Android|Android之Handler源码分析(第六篇(其他特性))
- Java版线索化二叉树
- java|java 不写this_还没弄明白Java中的this关键字吗,那来看这篇就够了!
- python|零基础学 Python 有什么建议()