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

leetcode300. 最長遞增子序列(動態(tài)規(guī)劃-java)

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

leetcode300. 最長遞增子序列

來源:力扣(LeetCode)
鏈接:https://leetcode.cn/problems/longest-increasing-subsequence

題目描述

給你一個整數(shù)數(shù)組 nums ,找到其中最長嚴(yán)格遞增子序列的長度。
子序列 是由數(shù)組派生而來的序列,刪除(或不刪除)數(shù)組中的元素而不改變其余元素的順序。例如,[3,6,2,7] 是數(shù)組 [0,3,1,6,2,2,7] 的子序列。

示例 1:
輸入:nums = [10,9,2,5,3,7,101,18]
輸出:4
解釋:最長遞增子序列是 [2,3,7,101],因此長度為 4 。

示例 2:
輸入:nums = [0,1,0,3,2,3]
輸出:4

示例 3:
輸入:nums = [7,7,7,7,7,7,7]
輸出:1

提示:
1 <= nums.length <= 2500
-104 <= nums[i] <= 104

進(jìn)階:
你能將算法的時間復(fù)雜度降低到 O(n log(n)) 嗎?

解題思路

我們設(shè)計動態(tài)規(guī)劃算法,不是需要一個 dp 數(shù)組嗎?我們可以假設(shè) dp[0…i-1] 都已經(jīng)被算出來了,然后問自己:怎么通過這些結(jié)果算出 dp[i]?
根據(jù)題目的定義,我們很容易得出base case dp[i] = 1;任何位置本身的長度可以先初始化為1.
我們再看怎么求出具體值,用圖來演示:
leetcode300. 最長遞增子序列(動態(tài)規(guī)劃-java),算法,java,數(shù)據(jù)結(jié)構(gòu),動態(tài)規(guī)劃,算法,leetcode,java,數(shù)據(jù)結(jié)構(gòu)
知道dp[3] = 3,時,怎么求dp[4] 呢,4 位置的數(shù)字從0 位置開始比較到3位置,
如果4位置的數(shù)字比3位置的數(shù)字大,那么dp[4] = 1 + dp[3];
知道這個過程我們就可以寫出dp算法了.

代碼演示:

	/**
	*  最長遞增子序列 可以直接復(fù)制進(jìn)力扣測試
	*/
   int lengthOfLIS(int[] nums) {
       int N = nums.length;
       //動態(tài)規(guī)劃表
       int[]dp = new int[N];
       for(int i = 0; i < N; i++){
       //base case 每個位置本身長度
           dp[i] = 1;
           for(int j = 0;j < i; j++){
           // i 位置依次向前比 ,比j 位置大,就是 1 + dp[i]
           // 根據(jù)不同j位置上的數(shù),來更新最大值
               if(nums[i] > nums[j]){
                  dp[i] = Math.max(dp[i],1 + dp[j]);  
               }
               
           }
       }
       int res = 0;
       //取出 dp表中的最大值 就是我們要的答案.
       for (int i = 0; i < dp.length;i++){
           res = Math.max(res,dp[i]);
       }
       return res;
    }

二分法改進(jìn)(N * logN)

	/**
	*  最長遞增子序列 可以直接復(fù)制進(jìn)力扣測試
	*/
   int lengthOfLIS(int[] nums) {
        int N = nums.length;
        int[] ends = new int[N];
        int pies = 0;
        for(int i = 0 ; i < nums.length;i++){
            int cur = nums[i];
            int L = 0;
            int R = pies;
            while(L < R){
                int mid = (L + R) / 2;
                if(ends[mid] >= cur){
                    R = mid;
                }else{
                    L = mid + 1;
                }
            }

            if(L == pies){
                pies++;
            }
            ends[L] = cur;
        }

        return pies;
    }

動態(tài)規(guī)劃專題

leetcode494. 目標(biāo)和

leetcode337. 打家劫舍 III

leetcode213. 打家劫舍 II

leetcode198. 打家劫舍

leetcode174. 地下城游戲

leetcode688. 騎士在棋盤上的概率文章來源地址http://www.zghlxwxcb.cn/news/detail-606786.html

到了這里,關(guān)于leetcode300. 最長遞增子序列(動態(tài)規(guī)劃-java)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

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

    力扣題目鏈接(opens new window) 給你一個整數(shù)數(shù)組 nums ,找到其中最長嚴(yán)格遞增子序列的長度。 子序列是由數(shù)組派生而來的序列,刪除(或不刪除)數(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日
    瀏覽(30)
  • 【LeetCode: 673. 最長遞增子序列的個數(shù) | 動態(tài)規(guī)劃】

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2024年02月13日
    瀏覽(33)
  • 動態(tài)規(guī)劃之最長遞增子序列

    leetcode 300 最長遞增子序列 1.定義dp數(shù)組:dp[i]表示以nums[i]結(jié)尾的最長遞增子序列的長度。 2.定義遞推公式 dp[i] = max(dp[j] + 1, dp[i]) 因?yàn)閐p[j] + 1中的dp[j]并非是在前一個已經(jīng)加1的dp[j]的基礎(chǔ)之上再加上1。若從初始狀態(tài)加1,而dp[i]永遠(yuǎn)保持的是最大的狀態(tài),則dp[j] + 1肯定要小一些。

    2024年01月23日
    瀏覽(40)
  • 【動態(tài)規(guī)劃】求最長遞增子序列問題

    【動態(tài)規(guī)劃】求最長遞增子序列問題

    最長遞增子序列(Longest Increasing Subsequence, LIS ) 子序列:對于任意序列s,它的子序列是通過刪除其中零個或多個元素得到的另?個序列 注:剩余元素的相對順序保持不變 給定n個整數(shù)組成的序列 s [ 1... n ] s[1...n] s [ 1... n ] ,求最長遞增子序列LIS(的長度) 8 3 6 1 3 5 4 7 假設(shè)

    2024年02月03日
    瀏覽(27)
  • 動態(tài)規(guī)劃9:最長遞增子序列、最長連續(xù)遞增序列、最長重復(fù)子數(shù)組、最長公共子序列、不相交的線、最長子序和

    動態(tài)規(guī)劃9:最長遞增子序列、最長連續(xù)遞增序列、最長重復(fù)子數(shù)組、最長公共子序列、不相交的線、最長子序和

    例題300: 給你一個整數(shù)數(shù)組 nums ,找到其中最長嚴(yán)格遞增子序列的長度。 子序列 是由數(shù)組派生而來的序列,刪除(或不刪除)數(shù)組中的元素而不改變其余元素的順序。例如,[3,6,2,7] 是數(shù)組 [0,3,1,6,2,2,7] 的子序列。 確定dp數(shù)組和下標(biāo)含義 dp[i]表示在第i個元素的最長子序列數(shù)

    2024年04月08日
    瀏覽(29)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包