【兔年创意投稿】兔兔的奇妙之旅(一)初生牛犊不怕虎

1,733 阅读3分钟

我正在参加「兔了个兔」创意投稿大赛,详情请看:「兔了个兔」创意投稿大赛

兔年的第一天,兔妈妈迎来了一堆兔宝宝。由此开启了一段崭新的旅程。

第一关:分配食物

兔妈妈遇到的第一个问题,就是如何分配食物。

image.png

关卡描述

只见兔妈妈的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次啦!怪不得它要累瘫了!

码上掘金代码链接兔年创意投稿-跳台阶

最后,感谢你能看到这里!后面将会持续更新,下一期将会讲述突突和其他兔子的互动历程!