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

leetCode 2915. 和為目標(biāo)值的最長(zhǎng)子序列的長(zhǎng)度 + 動(dòng)態(tài)規(guī)劃 +01背包 + 空間優(yōu)化 + 記憶化搜索 + 遞推

這篇具有很好參考價(jià)值的文章主要介紹了leetCode 2915. 和為目標(biāo)值的最長(zhǎng)子序列的長(zhǎng)度 + 動(dòng)態(tài)規(guī)劃 +01背包 + 空間優(yōu)化 + 記憶化搜索 + 遞推。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

2915. 和為目標(biāo)值的最長(zhǎng)子序列的長(zhǎng)度 - 力扣(LeetCode)


給你一個(gè)下標(biāo)從?0?開(kāi)始的整數(shù)數(shù)組?nums?和一個(gè)整數(shù)?target?。返回和為?target?的?nums?子序列中,子序列?長(zhǎng)度的最大值?。如果不存在和為?target?的子序列,返回?-1?。子序列?指的是從原數(shù)組中刪除一些或者不刪除任何元素后,剩余元素保持原來(lái)的順序構(gòu)成的數(shù)組。

leetCode 2915. 和為目標(biāo)值的最長(zhǎng)子序列的長(zhǎng)度 + 動(dòng)態(tài)規(guī)劃 +01背包 + 空間優(yōu)化 + 記憶化搜索 + 遞推,動(dòng)態(tài)規(guī)劃,leetcode,動(dòng)態(tài)規(guī)劃,01背包,記憶化搜索,空間優(yōu)化,遞推,回溯

(一)回溯?

  • f(i,j) 表示在物品集 nums 的前 i 個(gè)選取物品,使得裝滿(mǎn)容量j 的背包有最多個(gè)物品
  • 也就是f(i,j) 表示在數(shù)組 nums 前 i 個(gè)的選取元素,使得這些元素之和等于 j 最長(zhǎng)子序列長(zhǎng)度
  • leetCode 2915. 和為目標(biāo)值的最長(zhǎng)子序列的長(zhǎng)度 + 動(dòng)態(tài)規(guī)劃 +01背包 + 空間優(yōu)化 + 記憶化搜索 + 遞推,動(dòng)態(tài)規(guī)劃,leetcode,動(dòng)態(tài)規(guī)劃,01背包,記憶化搜索,空間優(yōu)化,遞推,回溯
class Solution {
public:
    // 遞歸搜索
    int lengthOfLongestSubsequence(vector<int>& nums, int target) {
        int n = nums.size();
        function<int(int,int)>dfs=[&](int i,int s) -> int {
            if(i<0) { 
                if(s==0) return 0;
                else return INT_MIN;
            }
            return max(dfs(i-1,s),dfs(i-1,s-nums[i])+1);
        };
        int ans = dfs(n-1,target);
        return ans<0?-1:ans;
    }
};

(二) 遞歸搜索 + 保存計(jì)算結(jié)果 = 記憶化搜索

class Solution {
public:
    // 記憶化遞歸搜索
    int lengthOfLongestSubsequence(vector<int>& nums, int target) {
        int n = nums.size();
        vector<vector<int>> memo(n,vector<int>(target+1,-1));
        function<int(int,int)>dfs=[&](int i,int s) -> int {
            if(i<0) { 
                if(s==0) return 0;
                else return INT_MIN;
            }
            int& res = memo[i][s];
            if(res != -1) return res;
            if (s < nums[i]) return res = dfs(i-1,s);
            return res = max(dfs(i-1,s),dfs(i-1,s-nums[i])+1);
        };
        int ans = dfs(n-1,target);
        return ans<0?-1:ans;
    }
};
class Solution {
public:
    // 記憶化遞歸搜索
    int lengthOfLongestSubsequence(vector<int>& nums, int target) {
        int n = nums.size();
        vector<vector<int>> memo(n+1,vector<int>(target+1,-1));
        function<int(int,int)>dfs=[&](int i,int s) -> int {
            if(i<0) { 
                if(s==0) return 0;
                else return INT_MIN;
            }
            int& res = memo[i+1][s];
            if(res != -1) return res;

            // 不選
            int& x = memo[i][s];
            if(x == -1) x=dfs(i-1,s);
            if (s < nums[i]) return res=x;

            // 選
            int& y = memo[i][s-nums[i]];
            if(y == -1) y=dfs(i-1,s-nums[i]);
            return res = max(x,y+1);
        };
        int ans = dfs(n-1,target);
        return ans<0?-1:ans;
    }
};

(三)1:1 翻譯成遞推

  • leetCode 2915. 和為目標(biāo)值的最長(zhǎng)子序列的長(zhǎng)度 + 動(dòng)態(tài)規(guī)劃 +01背包 + 空間優(yōu)化 + 記憶化搜索 + 遞推,動(dòng)態(tài)規(guī)劃,leetcode,動(dòng)態(tài)規(guī)劃,01背包,記憶化搜索,空間優(yōu)化,遞推,回溯
  • leetCode 2915. 和為目標(biāo)值的最長(zhǎng)子序列的長(zhǎng)度 + 動(dòng)態(tài)規(guī)劃 +01背包 + 空間優(yōu)化 + 記憶化搜索 + 遞推,動(dòng)態(tài)規(guī)劃,leetcode,動(dòng)態(tài)規(guī)劃,01背包,記憶化搜索,空間優(yōu)化,遞推,回溯
  • leetCode 2915. 和為目標(biāo)值的最長(zhǎng)子序列的長(zhǎng)度 + 動(dòng)態(tài)規(guī)劃 +01背包 + 空間優(yōu)化 + 記憶化搜索 + 遞推,動(dòng)態(tài)規(guī)劃,leetcode,動(dòng)態(tài)規(guī)劃,01背包,記憶化搜索,空間優(yōu)化,遞推,回溯
class Solution {
public:
    // 遞推
    int lengthOfLongestSubsequence(vector<int>& nums, int target) {
        int n = nums.size();
        vector<vector<int>> f(n+1,vector<int>(target+1,INT_MIN));
        f[0][0]=0;
        for(int i=0;i<nums.size();i++) {
            for(int j=0;j<=target;j++) {
                // if(j>=nums[i]) f[i+1][j] = max(f[i][j],f[i][j-nums[i]]+1);
                // else f[i+1][j] = f[i][j];
                f[i+1][j] = f[i][j];
                if(j>=nums[i]) f[i+1][j] = max(f[i][j],f[i][j-nums[i]]+1);
            }
        }
        int ans = f[n][target];
        return ans<0?-1:ans;
    }
};

進(jìn)一步優(yōu)化:

class Solution {
public: 
    // 遞推 + 優(yōu)化
    int lengthOfLongestSubsequence(vector<int>& nums, int target) {
        int n = nums.size();
        vector<vector<int>> f(n+1,vector<int>(target+1,INT_MIN));
        int sum=0;
        for(int i=0;i<nums.size();i++) {
            f[i][0]=0;
            sum=min(sum+nums[i],target);
            for(int j=1;j<=sum;j++) {
                f[i+1][j] = f[i][j];
                if(j>=nums[i]) f[i+1][j] = max(f[i][j],f[i][j-nums[i]]+1);
            }
        }
        int ans = f[n][target];
        return ans<0?-1:ans;
    }
};

>>空間優(yōu)化

  • 1、二維數(shù)組空間優(yōu)化
class Solution {
public:
    // 二維空間優(yōu)化
    int lengthOfLongestSubsequence(vector<int>& nums, int target) {
        int n = nums.size();
        vector<vector<int>> dp(2,vector<int>(target+1,INT_MIN));
        int sum=0;
        for(int i=0;i<n;i++) {
            dp[i%2][0]=0;
            sum=min(sum+nums[i],target);
            for(int j=1;j<=sum;j++) {
                if(j >= nums[i]) dp[(i+1)%2][j] = max(dp[i%2][j],dp[i%2][j-nums[i]]+1);
                else dp[(i+1)%2][j] = dp[i%2][j];
            }
        }
        int ans = dp[n%2][target];
        return ans<0?-1:ans;
    }
};
  • 2.一維空間優(yōu)化
class Solution {
public:
    // 一維空間優(yōu)化
    int lengthOfLongestSubsequence(vector<int>& nums, int target) {
        int n = nums.size();
        vector<int> dp(target+1,INT_MIN);
        dp[0]=0;
        int sum=0;
        for(int i=0;i<n;i++) {
            sum=min(sum+nums[i],target);
            for(int j=sum;j>=nums[i];j--) {
                dp[j] = max(dp[j],dp[j-nums[i]]+1);
            }
        }
        int ans = dp[target];
        return ans<0?-1:ans;
    }
};

leetCode 2915. 和為目標(biāo)值的最長(zhǎng)子序列的長(zhǎng)度 + 動(dòng)態(tài)規(guī)劃 +01背包 + 空間優(yōu)化 + 記憶化搜索 + 遞推,動(dòng)態(tài)規(guī)劃,leetcode,動(dòng)態(tài)規(guī)劃,01背包,記憶化搜索,空間優(yōu)化,遞推,回溯

leetCode 2915. 和為目標(biāo)值的最長(zhǎng)子序列的長(zhǎng)度 + 動(dòng)態(tài)規(guī)劃 +01背包 + 空間優(yōu)化 + 記憶化搜索 + 遞推,動(dòng)態(tài)規(guī)劃,leetcode,動(dòng)態(tài)規(guī)劃,01背包,記憶化搜索,空間優(yōu)化,遞推,回溯

leetCode 2915. 和為目標(biāo)值的最長(zhǎng)子序列的長(zhǎng)度 + 動(dòng)態(tài)規(guī)劃 +01背包 + 空間優(yōu)化 + 記憶化搜索 + 遞推,動(dòng)態(tài)規(guī)劃,leetcode,動(dòng)態(tài)規(guī)劃,01背包,記憶化搜索,空間優(yōu)化,遞推,回溯內(nèi)容總結(jié)來(lái)自B站這位up主(Horn_JoJo)的視頻簡(jiǎn)介:(總結(jié)得超棒!?。。?/strong>

動(dòng)態(tài)規(guī)劃之選或者不選 通過(guò)「選」「不選」,確定子問(wèn)題與原問(wèn)題的聯(lián)系。子問(wèn)題又可以通過(guò)同樣的「選」或者「不選」來(lái)再次找到子子問(wèn)題與子問(wèn)題的聯(lián)系。這樣就可以不斷將問(wèn)題拆成子問(wèn)題。就構(gòu)成了一個(gè)搜索樹(shù)。當(dāng)拆分到一定程度時(shí),則找到了最容易解決的子問(wèn)題。這樣就可以先將子問(wèn)題解決掉,然后反過(guò)來(lái)解決較大的子問(wèn)題。這樣就可以解決原問(wèn)題了。

  • 樹(shù)的根結(jié)點(diǎn)時(shí)原問(wèn)題。樹(shù)的葉子結(jié)點(diǎn)是邊界或者最小子問(wèn)題
  • 直接遞歸(滿(mǎn)二叉樹(shù)本,有重復(fù)子問(wèn)題), 記憶化搜索(遞歸+記錄)減少重復(fù)計(jì)算。
  • :省略遞」的過(guò)程,直接「歸」的過(guò)程中計(jì)算。

推薦和參考文章、視頻:?

116雙周賽T3復(fù)盤(pán)_嗶哩嗶哩_bilibilihttps://www.bilibili.com/video/BV1Zg4y197BR/?spm_id_from=333.788.top_right_bar_window_history.content.click&vd_source=a934d7fc6f47698a29dac90a922ba5a3

動(dòng)態(tài)規(guī)劃入門(mén):從記憶化搜索到遞推_嗶哩嗶哩_bilibilihttps://www.bilibili.com/video/BV1Xj411K7oF/?spm_id_from=333.788&vd_source=a934d7fc6f47698a29dac90a922ba5a3

2915. 和為目標(biāo)值的最長(zhǎng)子序列的長(zhǎng)度 - 力扣(LeetCode)https://leetcode.cn/problems/length-of-the-longest-subsequence-that-sums-to-target/solutions/2502839/mo-ban-qia-hao-zhuang-man-xing-0-1-bei-b-0nca/我的往期文章:

leetCode 198.打家劫舍 動(dòng)態(tài)規(guī)劃入門(mén):從記憶化搜索到遞推-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/134179583?spm=1001.2014.3001.5501文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-741561.html

到了這里,關(guān)于leetCode 2915. 和為目標(biāo)值的最長(zhǎng)子序列的長(zhǎng)度 + 動(dòng)態(tài)規(guī)劃 +01背包 + 空間優(yōu)化 + 記憶化搜索 + 遞推的文章就介紹完了。如果您還想了解更多內(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)文章

  • [雙指針] (三) LeetCode LCR 179. 查找總價(jià)格為目標(biāo)值的兩個(gè)商品 和 15. 三數(shù)之和

    [雙指針] (三) LeetCode LCR 179. 查找總價(jià)格為目標(biāo)值的兩個(gè)商品 和 15. 三數(shù)之和

    [雙指針] (三) LeetCode LCR 179. 查找總價(jià)格為目標(biāo)值的兩個(gè)商品 和 15. 三數(shù)之和 查找總價(jià)格為目標(biāo)值的兩個(gè)商品 LCR 179. 查找總價(jià)格為目標(biāo)值的兩個(gè)商品 題目分析 (1) 數(shù)組內(nèi)數(shù)字是升序 (2) 目標(biāo)值為target (3) 找兩數(shù)之和為target 解題思路 找兩個(gè)數(shù)字的和與目標(biāo)值相等,我們可以想到

    2024年02月05日
    瀏覽(25)
  • 【VUE】數(shù)字動(dòng)態(tài)變化到目標(biāo)值-vue-count-to

    【VUE】數(shù)字動(dòng)態(tài)變化到目標(biāo)值-vue-count-to

    vue-count-to是一個(gè)Vue組件,用于實(shí)現(xiàn)數(shù)字動(dòng)畫(huà)效果。它可以用于顯示從一個(gè)數(shù)字到另一個(gè)數(shù)字的過(guò)渡動(dòng)畫(huà)。? 插件名:vue-count-to 官方倉(cāng)庫(kù)地址:GitHub - PanJiaChen/vue-countTo: It\\\'s a vue component that will count to a target number at a specified duration https://panjiachen.github.io/countTo/demo/ 官方Demo地址:

    2024年02月11日
    瀏覽(33)
  • 算法27:最長(zhǎng)回文子序列長(zhǎng)度——范圍模型

    算法27:最長(zhǎng)回文子序列長(zhǎng)度——范圍模型

    目錄 題目: 樣本模型: 遞歸版本的范圍模型 分析過(guò)程 動(dòng)態(tài)規(guī)劃版本 優(yōu)化動(dòng)態(tài)規(guī)劃: 給定一個(gè)字符串str,返回這個(gè)字符串的最長(zhǎng)回文子序列長(zhǎng)度 比如?str = “a12b3c43def2ghi1kpm” * 最長(zhǎng)回文子序列是“1234321”或者“123c321”,返回長(zhǎng)度7 這一題使用樣本模型,也可以解決,只需

    2024年02月07日
    瀏覽(9)
  • leetcode分類(lèi)刷題:易混題辨析一、209. 長(zhǎng)度最小的子數(shù)組 vs 560. 和為K的子數(shù)組

    1、刷題慢慢積累起來(lái)以后,遇到相似的題目時(shí),會(huì)出現(xiàn)算法思路混淆了 2、這兩道題都是對(duì) 連續(xù)子數(shù)組加和 進(jìn)行考察,細(xì)節(jié)區(qū)別在于數(shù)組元素在209. 長(zhǎng)度最小的子數(shù)組為 正整數(shù)(窗口增加元素遞增,減少元素遞減) ,在560. 和為K的子數(shù)組為 整數(shù) 3、209. 長(zhǎng)度最小的子數(shù)組采

    2024年02月10日
    瀏覽(26)
  • 【python】求最長(zhǎng)連續(xù)公共子序列長(zhǎng)度的幾種解法

    ? 給定兩個(gè)序列X和Y,返回最長(zhǎng)連續(xù)的公共子序列長(zhǎng)度。如果沒(méi)有連續(xù)公共子序列,返回0. X和Y的元素都是整數(shù)。 示例: 輸入: 1 5 7 3 4 5 7 3 4 4 5 7 -2 輸出: 3 ?說(shuō)明: 最長(zhǎng)的連續(xù)公共子序列是[7,3,4] (X[2:4] 和Y[0:2]) 這道題在【leetcode1143】的基礎(chǔ)上增加了公共子序列連續(xù)的限制。

    2024年02月10日
    瀏覽(22)
  • 【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: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)
  • LeetCode | C++ 動(dòng)態(tài)規(guī)劃——300.最長(zhǎng)遞增子序列、674. 最長(zhǎng)連續(xù)遞增序列、718. 最長(zhǎng)重復(fù)子數(shù)組

    300題目鏈接 dp 數(shù)組定義 dp[i] 表示 i 之前包括 i 的以 nums[i]結(jié)尾 的最長(zhǎng)遞增子序列的長(zhǎng)度 需要包含nums[i]結(jié)尾,不然在做遞增比較的時(shí)候,就沒(méi)有意義了。 遞推公式 位置 i 的最長(zhǎng)遞增子序列 等于 j 從 0 到 i - 1各個(gè)位置的最長(zhǎng)遞增子序列 + 1 的 最大值 if (nums[i] nums[j]) dp[i] = ma

    2024年02月16日
    瀏覽(49)
  • 【Leetcode】128.最長(zhǎng)連續(xù)序列

    給定一個(gè)未排序的整數(shù)數(shù)組 nums ,找出數(shù)字連續(xù)的最長(zhǎng)序列(不要求序列元素在原數(shù)組中連續(xù))的長(zhǎng)度。 請(qǐng)你設(shè)計(jì)并實(shí)現(xiàn)時(shí)間復(fù)雜度為 O(n) 的算法解決此問(wèn)題。 示例1: 示例2: 提示 : 0 = nums.length = 10 5 -10 9 = nums[i] = 10 9

    2024年02月10日
    瀏覽(54)
  • LeetCode128.最長(zhǎng)連續(xù)序列

    LeetCode128.最長(zhǎng)連續(xù)序列

    ?我這個(gè)方法有點(diǎn)投機(jī)取巧了,題目說(shuō)時(shí)間復(fù)雜度最多O(n),而我調(diào)用了Arrays.sort()方法,他的時(shí)間復(fù)雜度是n*log(n),但是AC了,這樣的話(huà)這道題還是非常簡(jiǎn)單的,創(chuàng)建一個(gè)Hashmap,以nums數(shù)組的元素作為key,以這個(gè)元素是連續(xù)序列中的第幾個(gè)作為value,先把數(shù)組排一下序,然后從第

    2024年02月12日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包