国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法練習(xí) Day38 | LeetCode509,70,746

這篇具有很好參考價(jià)值的文章主要介紹了算法練習(xí) Day38 | LeetCode509,70,746。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

先導(dǎo)知識(shí):

1、動(dòng)態(tài)規(guī)劃常見題型

動(dòng)態(tài)規(guī)劃基礎(chǔ)問題
背包問題
打家劫舍
股票問題
子序列問題

2、動(dòng)態(tài)規(guī)劃五部曲

(1)確定dp數(shù)組的定義及下標(biāo)的含義

(2)確定遞推公式

(3)dp數(shù)組如何初始化

(4)遍歷順序

(5)打印dp數(shù)組

LeetCode509:509. 斐波那契數(shù)

題目描述:

斐波那契數(shù)?(通常用?F(n)?表示)形成的序列稱為?斐波那契數(shù)列?。該數(shù)列由?0?和?1?開始,后面的每一項(xiàng)數(shù)字都是前面兩項(xiàng)數(shù)字的和。也就是:

F(0) = 0,F(xiàn)(1)?= 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1

給定?n?,請(qǐng)計(jì)算?F(n)?。

示例 1:

輸入:n = 2
輸出:1
解釋:F(2) = F(1) + F(0) = 1 + 0 = 1

解題思路:

利用動(dòng)規(guī)五部曲來分析:

(1)確定dp數(shù)組以及下標(biāo)含義

dp[i]代表第i個(gè)位置的數(shù)值是dp[i]

(2)遞推公式

dp[i] = dp[i-1]+dp[i-2]

(3)dp數(shù)組初始化

dp[0]=0;

dp[1]=1;

(4)遍歷的順序

從前往后

完整代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-833999.html

    public int fib(int n) {
        if(n<=1){
            return n;
        }
        int[] dp = new int[n+1];
        dp[0]=0;
        dp[1]=1;
        for(int i=2;i<=n;i++) {
            dp[i] = dp[i-1]+dp[i-2];
        }
        return dp[n];
    }

LeetCode70:70. 爬樓梯

題目描述:

假設(shè)你正在爬樓梯。需要?n?階你才能到達(dá)樓頂。

每次你可以爬?1?或?2?個(gè)臺(tái)階。你有多少種不同的方法可以爬到樓頂呢?

示例 1:

輸入:n = 2
輸出:2
解釋:有兩種方法可以爬到樓頂。
1. 1 階 + 1 階
2. 2 階

解題思路:

利用動(dòng)規(guī)五部曲來分析:

(1)確定dp數(shù)組以及下標(biāo)含義

dp[i]:代表爬到第i個(gè)臺(tái)階有dp[i]種不同的方法

(2)遞推公式

最后一步可能是從i-1的位置走一步到達(dá)樓頂,也可能是從i-2的位置一次走兩節(jié)臺(tái)階到達(dá)的樓頂,所以可以推導(dǎo)出以下遞推公式:

? ? ? ? ? dp[i] = dp[i-1]+dp[i-2]

(3)dp數(shù)組初始化

dp[1]=1;

dp[2]=2;

(4)遍歷的順序

從前往后

完整代碼:

public int climbStairs(int n) {
        if (n <= 1) {
            return n;
        }
        int[] dp = new int[n+1];
        dp[1] = 1;
        dp[2] = 2;
        for (int i = 3;i<=n;i++) {
            dp[i] = dp[i-1] + dp[i-2];
        }
        return dp[n];
    }


?

?LeetCode746:746. 使用最小花費(fèi)爬樓梯

題目描述:

給你一個(gè)整數(shù)數(shù)組?cost?,其中?cost[i]?是從樓梯第?i?個(gè)臺(tái)階向上爬需要支付的費(fèi)用。一旦你支付此費(fèi)用,即可選擇向上爬一個(gè)或者兩個(gè)臺(tái)階。

你可以選擇從下標(biāo)為?0?或下標(biāo)為?1?的臺(tái)階開始爬樓梯。

請(qǐng)你計(jì)算并返回達(dá)到樓梯頂部的最低花費(fèi)。

示例 1:

輸入:cost = [10,15,20]
輸出:15
解釋:你將從下標(biāo)為 1 的臺(tái)階開始。
- 支付 15 ,向上爬兩個(gè)臺(tái)階,到達(dá)樓梯頂部。
總花費(fèi)為 15 。

解題思路:

利用動(dòng)規(guī)五部曲來分析:

(1)確定dp數(shù)組以及下標(biāo)含義

dp[i]存放的是達(dá)到i臺(tái)階的時(shí)候所需要的最低花費(fèi)

(2)遞推公式

由于最后一步可能是從i-1走一步到達(dá),也可能是在i-2的位置走一步到達(dá),所以dp[i]=dp[i-1]+cost[i-1]或者dp[i]=dp[i-2]+cost[i-2],?這兩個(gè)中的最小值就是題目中需要的最低花費(fèi)

公式:dp[i] = Math.min(dp[i-1] + cost[i-1], dp[i-2]+cost[i-2]);

(3)dp數(shù)組初始化

dp[0] = 0;

dp[1] = 0;

(4)遍歷的順序

從前往后

完整代碼:


    public int minCostClimbingStairs(int[] cost) {
        //初始化dp
        int len = cost.length;
        int[] dp = new int[len + 1];
        dp[0] = 0;
        dp[1] = 0;
        for(int i = 2; i <= len; i++) {
            dp[i] = Math.min(dp[i-1] + cost[i-1], dp[i-2]+cost[i-2]);
        }
        return dp[len];
    }

到了這里,關(guān)于算法練習(xí) Day38 | LeetCode509,70,746的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包