我正在参加「兔了个兔」创意投稿大赛,详情请看:「兔了个兔」创意投稿大赛
兔年的第一天,兔妈妈迎来了一堆兔宝宝。由此开启了一段崭新的旅程。
第一关:分配食物
兔妈妈遇到的第一个问题,就是如何分配食物。
关卡描述
只见兔妈妈的n只小兔站成一排。整数数组 exp 表示每只兔子的饥饿程度。它越饿,就需要给它越多食物。
兔妈妈需要保证:
- 每只兔子至少分配到 1 份食物。
- 相邻兔子中更饿的那只会分配到更多食物。
已知图中这三只 小兔崽子 的饥饿程度分别是3,1,2
现在兔妈妈很发愁,因为她数学不好,食物是有限的,孩子们都饿得嗷嗷叫,她却不知道怎么分才是最好。你能帮帮她吗?
请你制定一个分发食物的计划,计算并返回需要准备的 最少食物份数 。
参考答案及代码文章末尾揭晓哦~
第二关:跳台阶
小兔兔们渐渐长大了,其中有一只叫 突突 的兔崽子,它特别调皮,整天想着要去玩,虽然看着不太聪明的样子,但又总是想搞点花样。现在它玩起了 跳台阶 游戏。
在跳的过程中它玩出了花样。它不满足于单纯跳上跳下,而是一次跳一个或者两个台阶。 它发现,当台阶数分别为1,2,3的时候,跳的方法也分别为1,2,3种。于是它理所当然地觉得方法数和台阶数是线性关系。
但是从第4阶楼梯开始,它开始发现不对劲了,到准备去试试10级楼梯的时候,它已经累得跳不动了。
但它又不肯服输,它就是想知道要到第10级楼梯会有多少种跳法? 你能帮它算一下吗?
它知道了答案可以早点回家吃饭噢~
关卡答案
关于分发食物
解决方案代码如下:
class Solution {
public int food(int[] exp) {
int n=exp.length;
int right=0,res=0;
int [] left=new int [n];
for(int i=0;i<n;i++){
if(i>0&&exp[i]>exp[i-1]){
left[i]=left[i-1]+1;
}
else left[i]=1;
}
for(int i=n-1;i>=0;i--){
if(i<n-1&&exp[i]>exp[i+1]){
right++;
}
else right=1;
left[i]=Math.max(left[i],right);
res+=left[i];
}
return res;
}
}
当输入数组为[3,1,2]的时候,结果为5~
码上掘金代码链接兔年创意投稿-分发食物
关于跳台阶
解决方案代码如下:
class Solution {
public int numWays(int n) {
if(n==0) return 1;
if(n==1) return 1;
int [] dp=new int [n+1];
dp[0]=1;
dp[1]=1;
for(int i=2;i<=n;i++){
dp[i]=(dp[i-1]+dp[i-2])%1000000007;
}
return dp[n];
}
}
当n为10的时候,方法数为89。 而前面,突突已经跳了1+2+3+5+8+13+21+34+58次啦!怪不得它要累瘫了!
码上掘金代码链接兔年创意投稿-跳台阶
最后,感谢你能看到这里!后面将会持续更新,下一期将会讲述突突和其他兔子的互动历程!