【笔记】简单难度面试题

牛妹的礼物

众所周知,牛妹有很多很多粉丝,粉丝送了很多很多礼物给牛妹,牛妹的礼物摆满了地板。地板是N×M的格子,每个格子有且只有一个礼物,牛妹已知每个礼物的体积。地板的坐标是左上角(1,1) 右下角(N, M)。牛妹只想要从屋子左上角走到右下角,每次走一步,每步只能向下走一步或者向右走一步或者向右下走一步,每次走过一个格子,拿起(并且必须拿上)这个格子上的礼物。
牛妹想知道,她能走到最后拿起的所有礼物体积最小和是多少?

输入
[[1,2,3],[2,3,4]]
输出
7
思路:dp,初始化d[0][i]和dp[i][0],然后将其他格子所代表的礼物数值转为最短路径(下、右、右下)的数值,随后输出最右下角数值即可。
核心代码:

dp[0][0]=presentVolumn[0][0];  
    //初始化第0行
    for(int i=1;i<w;++i)
        dp[0][i]=dp[0][i-1]+presentVolumn[0][i];
    //初始化第0列
    for(int i=1;i<h;++i)
        dp[i][0]=dp[i-1][0]+presentVolumn[i][0];
    //计算内部值
    for(int i=1;i<h;++i)
        for(int j=1;j<w;j++)
            dp[i][j]=min(dp[i-1][j-1],min(dp[i][j-1],dp[i-1][j]))+presentVolumn[i][j];

牛妹的蛋糕

众所周知,牛妹非常喜欢吃蛋糕。
第一天牛妹吃掉蛋糕总数三分之一(向下取整)多一个,第二天又将剩下的蛋糕吃掉三分之一(向下取整)多一个,以后每天吃掉前一天剩下的三分之一(向下取整)多一个,到第n天准备吃的时候只剩下一个蛋糕。牛妹想知道第一天开始吃的时候蛋糕一共有多少呢?

输入
2
输出
3
同样是dp,因为确定第n-1天剩余为1(第n天准备吃也就是还没吃)因此dp[n-1]=1;依次往前推
第i天的剩余量:dp[i]=(dp[i-1]×2/3)-1,那么 我们从后往前推时,
第i天的初始量:dp[i]=(dp[i+1]+1)×3/2;
核心代码:

  int cakeNumber(int n){  
    if(n<0)   
        return 0;
    int dp[100];
            dp[n-1]=1;
        for(int i=n-2;i>=0;i--)
        {
            dp[i]=(dp[i+1]+1)*3/2;
        }
        return dp[0];

神奇的数字

在这个特殊的假期里,由于牛牛在家特别无聊,于是他发明了一个小游戏,游戏规则为:将字符串数字中为偶数位的数字进行翻转,将翻转后的结果进行输出。
输入
"1234"
输出
"1432"
说明
第2、4位为偶数,所以将其翻转后,得到 1432
思路:分别从前往后找偶数以及从后往前找偶数,找到之后即对两者交换,并修改指针。
核心代码:

  //已知数字串string number
  int len=number.size();
    int i=0,j=len-1;
    while(i<j)
    {
        while(i<j&&(number[i]-'0')&1)
            i++;
        while(i<j&&(number[j]-'0')&1)
            j--;
        if(i<j)
            swap(number[i++],number[j--]);
    }
    return number;
}
posted @ 2020-08-13 14:12  清蒸母猪  阅读(139)  评论(0编辑  收藏  举报