zoukankan      html  css  js  c++  java
  • 快手笔试题

    题目:你需要爬上一个N层的楼梯,在爬楼梯的过程中,每阶楼梯需花费非负代价,第 i 阶楼梯花费代价表示cost[i],一旦你付出了代价,你可以在该阶梯基础上往上爬一阶或两阶。在开始时,你可以选择从第 0 阶或第 1 阶开始出发。请计算爬上楼层顶部的最低花费。

    输入格式:

    1,100,1,100,1,1,100,1,1

    输出格式:

    6

    分析:动态规划。当前最小体力花费=min(距当前位置一阶梯的最小体力花费+走一阶梯的体力花费,距当前位置两阶梯的最小体力花费+走两阶梯的体力花费)。

    • dp[i] = min(dp[i-2]+cost[i-2],dp[i-1]+cost[i-1]) 

    求解:

    class Solution {
    public:
        int minCostClimbingStairs(vector<int>& cost) {
            if(cost.size()==0){
                return 0;
            }
            if(cost.size()==1){
                return cost[0];
            }
            if(cost.size()==2){
                return std::min(cost[0],cost[1]);
            }
            int step[1024];
            step[0] = 0;
            step[1] = 0;
            for(int i=2;i<=cost.size();i++){
                step[i] = std::min(step[i-1]+cost[i-1],step[i-2]+cost[i-2]);
            }
            return step[cost.size()];
        }
    };
    

      

  • 相关阅读:
    apply()和call()的区别
    强制类型转换
    浮动理解
    清除浮动的方式
    五大主流浏览器及四大内核
    CSS引入方式
    js构建类的方法
    web前端与后端的理解区分
    Java的API及Object
    面向对象之this关键字
  • 原文地址:https://www.cnblogs.com/xzxl/p/9623463.html
Copyright © 2011-2022 走看看