動態規劃 最長遞增子串行

2021-10-06 16:05:14 字數 953 閱讀 6286

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度

例項:

輸入:[10,

9,2,

5,3,

7,101,18]

輸出:4

解釋:最長的上公升子串行為[2,

3,7,

101]

,長度為4

說明:

可能會有多種最長上公升子串行的和,只需要輸出對應長度即可

演算法的時間複雜度應為o(n2)

**首先,dp陣列的定義如下:dp[i]表示以nums[i]這個數結尾的最長遞增子串行的長度。以上面的栗子為例,dp[5]=3,dp[7]=4

根據這個定義,最終結果應是dp陣列中的最大值

int res=0;

for(

int i=

0;isize()

;i++

)return res;

那麼怎麼求每乙個dp[i]的值呢,這就需要知道動態規劃問題的設計思想。當我們要求dp[5]時,由於是遞增子串行

,只需要找到前面那些結尾比nums[[5]小的子串行,然後把nums[5]接到後面就行,就形成了乙個新的子串行,而且這個新的子串行的長度+1。

當然,會形成很多種新的子串行,但我們只要最長的、把最長子序列的長度最為dp[5]的值。

for

(int j=

0;j)

應當注意的時,dp陣列應全初始化為1,因為子串行最少也要包含自己。

public

intlengthoflis

(int

nums)

}int res =0;

for(

int i =

0; i < dp.length; i++

)return res;

}

動態規劃 最長遞增子串行

給出序列 1 2 3 4 2 5 3 4 a 1 1,a 2 2,a 7 3,a 8 4 求其最長的遞增子串行,以上最長遞增子串行為 1 2 3 4 5 問題細分 初始化條件f 1 1,序列只有1個長度即為1 f 2 a 2 與下標小於2的比較,即a 1 比較,a 2 a 1 因此更新f 2 f 1...

動態規劃 最長遞增子串行

最長遞增子串行是動態規劃中最經典的問題之一,該問題描述的是在乙個已知序列中,取出若干元素 不必連續 組成乙個新的序列,子串行的各個數先後順序保持不變,且對子序列中的任意下標x令dp i 表示以a i 作為末尾的最長遞增子串行的長度。於是,通過設定這麼乙個陣列,最長遞增子串行的長度便是陣列dp中的最大...

動態規劃 最長遞增子串行

經典的最長子序列問題,最近程式設計訓練遇到此題苦無思路,在網上找到比較規範的解答,細思兩天後還是覺得有點問題,現在整理總結如下 參照 1.問題描述 給定乙個序列,求解它的最長 遞增 子串行 的長度。比如 arr 的最長遞增子串行長度為4。即為 1,4,5,9 2.dp演算法分析 按照上述作者的解答 ...