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

最小花费爬楼梯

https://www.nowcoder.com/practice/9b969a3ec20149e3b870b256ad40844e

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int n = in.nextInt();

        int[] arr = new int[n];

        for (int i = 0; i < n; i++) {
            arr[i] = in.nextInt();
        }

        // int process1 = process(arr, 0, 0);
        // int process2 = process(arr, 1, 0);

        // System.out.println(Math.min(process1, process2));

        System.out.println(dp(arr));
    }

  //尝试方法,超时了
    public static int process(int[] arr, int index, int free) {
        int len = arr.length - 1;
        if (index == len) {
            return free + arr[index];//通过最后一个台阶登顶
        }
      
        if (index > len) {
            return free;//没通过最后一个台阶登顶
        }

        free += arr[index];
        //走一步
        int one = process(arr, index + 1, free);
        //走两步
        int tow = process(arr, index + 2, free);
        //取最小值
        return Math.min(one, tow);
    }

  //动态规划
    public static int dp(int[] arr) {

        int len = arr.length;

        int[] dp = new int[len];

        dp[len - 1] = arr[len - 1];
        dp[len - 2] = arr[len - 2];

        for (int i = dp.length - 3; i >= 0; i--) {
            dp[i] = arr[i] + Math.min(dp[i + 1], dp[i + 2]);
        }
        return Math.min(dp[0], dp[1]);
    }

}

全部评论

相关推荐

砸砸无所畏惧:同字节耐面王 不同部门一起面了十几轮 最后放弃了 有个面试官透露面评都是算法能力不达预期
点赞 评论 收藏
分享
程序员小白条:学历和简历问题,你想走开发,现在很难的啦,尤其后端方向很难走,前端、测开,都会好很多,另外要等8月底和9月初去投日常
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务