日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[dp]leetcode 746. Min Cost Climbing Stairs

發布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [dp]leetcode 746. Min Cost Climbing Stairs 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

輸入:一個數組cost,cost[i]表示越過第i個臺階的代價(可能是熱量,也可能是過路費)
輸出:走過這n個臺階,需要的最小代價
規則:一旦你為第i個臺階付出代價cost[i],那么你可以到達第i+1個臺階,也可以到達第i+2個臺階。你可以從第0個或者第1個臺階開始走。
分析:沒什么好說的,一步步走,沒走一步付出代價private void walk(int step,int currentcost) 表達站在第i個臺階,付出了多少代價。
你可以試著把cache去掉,當然是超時。加cache是因為,如果你曾經花費代價10站在了第5個臺階,那下次遇到需要花費代價15站在了第5個臺階,就沒必要進行走下去。因為代價肯定高嘛。

class Solution {private int mincost = Integer.MAX_VALUE;private int[] cost;private int[] cache;private int n;public int minCostClimbingStairs(int[] cost) {this.cost = cost;this.n = cost.length;this.cache = new int[n];walk(0,0);walk(1,0);return mincost;}private void walk(int step,int currentcost){if(step>=n){mincost = Math.min(mincost,currentcost);return;}if(cache[step]==0 || currentcost<cache[step]){cache[step] = currentcost;walk(step+1,currentcost+cost[step]);walk(step+2,currentcost+cost[step]);}} }

動態規劃分析:初步分析得到能站點第i個臺階的代價應該是與第i-1和第i-2臺階有關。
之前很多從回溯法到動態規劃都會發現dp[i]和回調函數的含義會有點變化。這次不會發生變化,直接拿過來。

dp[i]表示能夠到達第i個臺階需要的最小代價 dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]cost[i-2]]) 最后返回dp[n] public int minCostClimbingStairs(int[] cost) {int n = cost.length;int[] dp = new int[n+1];dp[0] = 0;dp[1] = 0;for(int i=2;i<=n;i++){dp[i] = Math.min(dp[i-2]+cost[i-2],dp[i-1]+cost[i-1]);}return dp[n];}

總結

以上是生活随笔為你收集整理的[dp]leetcode 746. Min Cost Climbing Stairs的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。