算法|字节跳动21春招第三场笔试算法题

题目描述:

动物园有猴山,每天需要给猴子们发香蕉,猴子会排队依次取食。
猴子们铺张浪费,会多拿食物,但最多不会拿超过自身食量的二倍且不会超过当前还存在的香蕉的一半,最后一个猴子除外(即最后一个猴子可以拿完剩余的所有香蕉)。
最少需要准备多少香蕉,能保证所有猴子都能吃饱?
输入描述:
【算法|字节跳动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]


    推荐阅读