TOP101题解 | BM64#最小花费爬楼梯#

最小花费爬楼梯

https://www.nowcoder.com/practice/6fe0302a058a4e4a834ee44af88435c7

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * @author Senky
 * @date 2023.08.29
 * @par url https://www.nowcoder.com/creation/manager/content/584337070?type=column&status=-1
 * @brief 创建一个costLen + 1 大小的数组dp;
 *          循环遍历数组,dp[i]表示跳到第i级台阶最小的过路费
 *              遍历结束,倒数第一、倒是第二级台阶最小的就是整体的最小的花费
 * @param cost int整型一维数组 
 * @param costLen int cost数组长度
 * @return int整型
 */

#include <math.h>
#include <stdlib.h>

int minCostClimbingStairs(int* cost, int costLen ) 
{
    // write code here
    if(0 == costLen)
    {
        return 0;//0级台阶无过路费
    }
    else if (1 == costLen) 
    {
        return cost[0];//1级台阶的过路费
    }
    else //2级以上
    {
        int* dp = (int*)malloc((costLen + 1) * sizeof(int));
        dp[0] = cost[0];
        dp[1] = cost[1];

        for(int i = 2; i < costLen; i++)
        {
            /*对于第i级,需要从第i级的前一两级跳上来,并且跳上第i级会立马产生过路费
            最小费用就是:第i级的过路费+前两级最小的过路费跳到本级*/
            dp[i] = cost[i] + fmin(dp[i - 1], dp[i - 2]);
        }
        int result = fmin(dp[costLen - 1], dp[costLen - 2]);

        free(dp);

        return result;
    }

}

#TOP101#
TOP101-BM系列 文章被收录于专栏

系列的题解

全部评论

相关推荐

不愿透露姓名的神秘牛友
04-30 11:43
春招失败、父母离婚,好像我的人生一团糟,一年来压力大到常常崩溃。不知道能跟谁聊,朋友其实对我非常好,但是她无意中表达出来的家庭幸福都会刺痛到我……和ai聊天,我的未来在更高处,不在楼下,忍不住爆哭😭
youngfa:害,妹妹,我是一个研究生(很上进很想找到好工作的那种),但去年因为生病回家休养错过了秋招(当时对我的冲击也是非常大的),这学期返校来了也是把论文盲审交了后才开始找工作,现在也是一个offer没有,但我就没有像你一样把这个阶段性的事情绑定到人生上,人生不仅很长,也很广阔,先停下来,放松一下哦。不要被外部环境灌输的思维操控了,好好爱自己!
点赞 评论 收藏
分享
已run的小章鱼很安静:跟他说毕业证学位证双证拿出来一个他单亲Null,拿两个他双亲是Null
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务