leetcode746[Min Cost Climbing Stairs]

使用最小花費爬樓梯 ,題目描述如下:

數組的每個索引做爲一個階梯,第 i個階梯對應着一個非負數的體力花費值 cost[i](索引從0開始)。

每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。

您需要找到達到樓層頂部的最低花費。在開始時,你可以選擇從索引爲 0 或 1 的元素作爲初始階梯。

比如[1,100,1,1]對應的最小花費就是1+1=2,[1,100,110,1]對應的最小花費就是100+1=101。

顯然本題是一道動態規劃題,假設從第i層出發的最小花費爲min_cost[i],因爲只能從上一層或者上上一層爬到本層,所以從本層出發的最小花費爲前兩層中最小的最小花費加上本層的花費,動態規劃方程爲min_cost[i]=min(min_cost[i-1],min_cost[i-2])+cost[i],方便起見可以令出出發層和目的層的cost爲0,另外每次循環只需要前兩層的min_cost,且最後只要目的層的min_cost,因此只需要兩個變量存儲,那麼代碼就很簡單了。

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int last = cost[0];
        int last_last = cost[1];
        cost.push_back(0);
        for(int i =2;i<cost.size();++i)
        {
           int current = min(last,last_last)+cost[i];
           last = last_last;
           last_last = current;
        }
        return last_last;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章