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

力扣--動(dòng)態(tài)規(guī)劃300.最長(zhǎng)遞增子序列

這篇具有很好參考價(jià)值的文章主要介紹了力扣--動(dòng)態(tài)規(guī)劃300.最長(zhǎng)遞增子序列。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

力扣--動(dòng)態(tài)規(guī)劃300.最長(zhǎng)遞增子序列,leetcode,動(dòng)態(tài)規(guī)劃,算法,c語(yǔ)言,學(xué)習(xí),c++

一開(kāi)始想到的方法非常低效,但好理解。
?

思路分析:

  1. 使用二維數(shù)組dp來(lái)記錄遞增子序列的長(zhǎng)度信息,其中dp[i][0]表示以nums[i]結(jié)尾的最長(zhǎng)遞增子序列的長(zhǎng)度,dp[i][1]表示包含nums[i]的最長(zhǎng)遞增子序列的長(zhǎng)度。

  2. 初始化dp數(shù)組,將以第一個(gè)元素結(jié)尾的遞增子序列長(zhǎng)度置為0。

  3. 使用兩層循環(huán)遍歷數(shù)組,比較當(dāng)前元素與前面元素的大小關(guān)系,更新dp數(shù)組的值。

  4. 最終返回最后一個(gè)元素的兩種狀態(tài)中的最大值,即為整個(gè)數(shù)組的最長(zhǎng)遞增子序列的長(zhǎng)度。

這種動(dòng)態(tài)規(guī)劃算法的時(shí)間復(fù)雜度為O(n^2),其中n為數(shù)組的長(zhǎng)度。

class Solution {
public:
    // 函數(shù)用于計(jì)算最長(zhǎng)遞增子序列的長(zhǎng)度
    int lengthOfLIS(vector<int>& nums) {
        // dp[i][0]表示以nums[i]結(jié)尾的最長(zhǎng)遞增子序列的長(zhǎng)度
        // dp[i][1]表示包含nums[i]的最長(zhǎng)遞增子序列的長(zhǎng)度
        vector<vector<int>> dp(nums.size(), vector<int>(2, 1));
        
        // 初始化dp數(shù)組,將以第一個(gè)元素結(jié)尾的遞增子序列長(zhǎng)度置為0
        dp[0][0] = 0;

        // 遍歷數(shù)組,計(jì)算dp數(shù)組的值
        for (int i = 1; i < nums.size(); i++) {
            for (int j = i - 1; j >= 0; j--) {
                // 如果當(dāng)前元素大于前面的某個(gè)元素,更新包含當(dāng)前元素的遞增子序列的長(zhǎng)度
                if (nums[i] > nums[j]) {
                    dp[i][1] = max(dp[i][1], dp[j][1] + 1);
                }
                // 更新以當(dāng)前元素結(jié)尾的遞增子序列的長(zhǎng)度
                dp[i][0] = max(dp[i][0], max(dp[j][1], dp[j][0]));
            }
        }

        // 返回最終結(jié)果,取最后一個(gè)元素的兩種狀態(tài)中的最大值
        return max(dp[nums.size() - 1][0], dp[nums.size() - 1][1]);
    }
};

但還有種既節(jié)省空間也節(jié)省時(shí)間的方法。

思路分析:

  1. 初始化dp數(shù)組,其中dp[i]表示以第i個(gè)元素結(jié)尾的最長(zhǎng)遞增子序列的長(zhǎng)度,初始值為1。

  2. 使用兩層循環(huán)遍歷數(shù)組,對(duì)于每個(gè)元素,查找在其之前的元素中比它小的元素,更新以當(dāng)前元素結(jié)尾的最長(zhǎng)遞增子序列的長(zhǎng)度。

  3. 在內(nèi)循環(huán)中,通過(guò)比較當(dāng)前元素與之前元素的大小關(guān)系,更新dp數(shù)組的值。

  4. 同時(shí),記錄整個(gè)數(shù)組的最長(zhǎng)遞增子序列的長(zhǎng)度,即取dp數(shù)組中的最大值。

  5. 最終返回整個(gè)數(shù)組的最長(zhǎng)遞增子序列的長(zhǎng)度。

這種算法的時(shí)間復(fù)雜度為O(n^2),其中n為數(shù)組的長(zhǎng)度。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-819627.html

class Solution {
public:
    // 函數(shù)用于計(jì)算最長(zhǎng)遞增子序列的長(zhǎng)度
    int lengthOfLIS(vector<int>& nums) {
        // 如果數(shù)組長(zhǎng)度小于等于1,直接返回?cái)?shù)組長(zhǎng)度
        if (nums.size() <= 1) return nums.size();
        
        // dp數(shù)組用于記錄以每個(gè)元素結(jié)尾的最長(zhǎng)遞增子序列的長(zhǎng)度
        vector<int> dp(nums.size(), 1);
        
        // result用于記錄整個(gè)數(shù)組的最長(zhǎng)遞增子序列的長(zhǎng)度
        int result = 0;
        
        // 遍歷數(shù)組
        for (int i = 1; i < nums.size(); i++) {
            // 在當(dāng)前元素之前的元素中查找比當(dāng)前元素小的元素
            for (int j = 0; j < i; j++) {
                // 如果找到比當(dāng)前元素小的元素,更新以當(dāng)前元素結(jié)尾的最長(zhǎng)遞增子序列的長(zhǎng)度
                if (nums[i] > nums[j]) {
                    dp[i] = max(dp[i], dp[j] + 1);
                }
            }
            
            // 更新整個(gè)數(shù)組的最長(zhǎng)遞增子序列的長(zhǎng)度
            if (dp[i] > result) {
                result = dp[i];
            }
        }
        
        // 返回最終結(jié)果,即整個(gè)數(shù)組的最長(zhǎng)遞增子序列的長(zhǎng)度
        return result;
    }
};

到了這里,關(guān)于力扣--動(dòng)態(tài)規(guī)劃300.最長(zhǎng)遞增子序列的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(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)文章

  • 力扣300. 最長(zhǎng)遞增子序列

    思路: 假設(shè) dp[i] 為前 i 個(gè)元素構(gòu)成的最長(zhǎng)遞增子序列的個(gè)數(shù),包含 nums[i]; 則 dp[i] 構(gòu)成序列上一個(gè)元素 nums[j] 構(gòu)成最長(zhǎng)遞增子序列 dp[j],則 dp[i] = dp[j] + 1; 如果動(dòng)態(tài)取 j ∈ [0, i - 1],則選取其中最長(zhǎng)遞增子序列值中最大的,其值 + 1 來(lái)更新 dp[i] 的值;

    2024年02月04日
    瀏覽(24)
  • 最長(zhǎng)遞增子序列——力扣300
  • 【LeetCode動(dòng)態(tài)規(guī)劃#14】子序列系列題(最長(zhǎng)遞增子序列、最長(zhǎng)連續(xù)遞增序列、最長(zhǎng)重復(fù)子數(shù)組、最長(zhǎng)公共子序列)

    【LeetCode動(dòng)態(tài)規(guī)劃#14】子序列系列題(最長(zhǎng)遞增子序列、最長(zhǎng)連續(xù)遞增序列、最長(zhǎng)重復(fù)子數(shù)組、最長(zhǎng)公共子序列)

    力扣題目鏈接(opens new window) 給你一個(gè)整數(shù)數(shù)組 nums ,找到其中最長(zhǎng)嚴(yán)格遞增子序列的長(zhǎng)度。 子序列是由數(shù)組派生而來(lái)的序列,刪除(或不刪除)數(shù)組中的元素而不改變其余元素的順序。例如,[3,6,2,7] 是數(shù)組 [0,3,1,6,2,2,7] 的子序列。 示例 1: 輸入:nums = [10,9,2,5,3,7,101,18] 輸出

    2024年02月01日
    瀏覽(28)
  • 【LeetCode: 673. 最長(zhǎng)遞增子序列的個(gè)數(shù) | 動(dòng)態(tài)規(guī)劃】

    【LeetCode: 673. 最長(zhǎng)遞增子序列的個(gè)數(shù) | 動(dòng)態(tài)規(guī)劃】

    ?? 算法題 ?? ?? 算法刷題專(zhuān)欄 | 面試必備算法 | 面試高頻算法 ?? ?? 越難的東西,越要努力堅(jiān)持,因?yàn)樗哂泻芨叩膬r(jià)值,算法就是這樣? ?? 作者簡(jiǎn)介:碩風(fēng)和煒,CSDN-Java領(lǐng)域新星創(chuàng)作者??,保研|國(guó)家獎(jiǎng)學(xué)金|高中學(xué)習(xí)JAVA|大學(xué)完善JAVA開(kāi)發(fā)技術(shù)棧|面試刷題|面經(jīng)八股文

    2024年02月03日
    瀏覽(22)
  • 動(dòng)態(tài)規(guī)劃算法 | 最長(zhǎng)遞增子序列

    動(dòng)態(tài)規(guī)劃算法 | 最長(zhǎng)遞增子序列

    通過(guò)查閱相關(guān)資料 發(fā)現(xiàn)動(dòng)態(tài)規(guī)劃問(wèn)題一般就是求解最值問(wèn)題 。這種方法在解決一些問(wèn)題時(shí)應(yīng)用比較多,比如求最長(zhǎng)遞增子序列等。 有部分人認(rèn)為動(dòng)態(tài)規(guī)劃的核心就是:窮舉。因?yàn)橐笞钪?,肯定要把所有可行的答案窮舉出來(lái),然后在其中找最值。 首先,筆者認(rèn)為動(dòng)態(tài)規(guī)劃中

    2024年02月06日
    瀏覽(30)
  • Leetcode:300. 最長(zhǎng)遞增子序列、674. 最長(zhǎng)連續(xù)遞增序列(C++)

    目錄 300.?最長(zhǎng)遞增子序列 題目描述: 實(shí)現(xiàn)代碼: 原理思路: 674.?最長(zhǎng)連續(xù)遞增序列 題目描述: 實(shí)現(xiàn)代碼: 原理思路: 題目描述: ????????給你一個(gè)整數(shù)數(shù)組? nums ?,找到其中最長(zhǎng)嚴(yán)格遞增子序列的長(zhǎng)度。 子序列? 是由數(shù)組派生而來(lái)的序列,刪除(或不刪除)數(shù)組中

    2024年02月11日
    瀏覽(32)
  • ( 動(dòng)態(tài)規(guī)劃) 674. 最長(zhǎng)連續(xù)遞增序列 / 718. 最長(zhǎng)重復(fù)子數(shù)組——【Leetcode每日一題】

    ( 動(dòng)態(tài)規(guī)劃) 674. 最長(zhǎng)連續(xù)遞增序列 / 718. 最長(zhǎng)重復(fù)子數(shù)組——【Leetcode每日一題】

    難度:簡(jiǎn)單 給定一個(gè)未經(jīng)排序的整數(shù)數(shù)組,找到最長(zhǎng)且 連續(xù)遞增的子序列 ,并返回該序列的長(zhǎng)度。 連續(xù)遞增的子序列 可以由兩個(gè)下標(biāo) l 和 r(l r) 確定,如果對(duì)于每個(gè) l = i r ,都有 nums[i] nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是連續(xù)遞增子序列。

    2024年02月05日
    瀏覽(24)
  • leetcode300. 最長(zhǎng)遞增子序列 子序列(不連續(xù))

    https://leetcode.cn/problems/longest-increasing-subsequence/ 給你一個(gè)整數(shù)數(shù)組 nums ,找到其中最長(zhǎng)嚴(yán)格遞增子序列的長(zhǎng)度。 子序列 是由數(shù)組派生而來(lái)的序列,刪除(或不刪除)數(shù)組中的元素而不改變其余元素的順序。例如,[3,6,2,7] 是數(shù)組 [0,3,1,6,2,2,7] 的子序列。 LIS即最長(zhǎng)上升子序列,指

    2024年02月14日
    瀏覽(22)
  • 算法與數(shù)據(jù)結(jié)構(gòu)(二十三)動(dòng)態(tài)規(guī)劃設(shè)計(jì):最長(zhǎng)遞增子序列

    算法與數(shù)據(jù)結(jié)構(gòu)(二十三)動(dòng)態(tài)規(guī)劃設(shè)計(jì):最長(zhǎng)遞增子序列

    注:此文只在個(gè)人總結(jié) labuladong 動(dòng)態(tài)規(guī)劃框架,僅限于學(xué)習(xí)交流,版權(quán)歸原作者所有; 也許有讀者看了前文 動(dòng)態(tài)規(guī)劃詳解,學(xué)會(huì)了動(dòng)態(tài)規(guī)劃的套路:找到了問(wèn)題的「狀態(tài)」,明確了 dp 數(shù)組/函數(shù)的含義,定義了 base case;但是不知道如何確定「選擇」,也就是找不到狀態(tài)轉(zhuǎn)移

    2024年02月13日
    瀏覽(33)
  • 【算法】力扣【動(dòng)態(tài)規(guī)劃,LCS】1143. 最長(zhǎng)公共子序列

    1143. 最長(zhǎng)公共子序列 本文是對(duì) LCS 這一 動(dòng)態(tài)規(guī)劃 模型的整理,以力扣平臺(tái)上的算法題1143:最長(zhǎng)公共子序列為模板題進(jìn)行解析。 該題目要求計(jì)算兩個(gè)字符串的最長(zhǎng)公共子序列(Longest Common Subsequence,簡(jiǎn)稱(chēng)LCS)的長(zhǎng)度。字符串的子序列是指在不改變字符順序的情況下,通過(guò)刪去

    2024年01月17日
    瀏覽(27)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包