300 最長上公升子串行

2021-10-06 22:00:21 字數 737 閱讀 7875

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

示例:輸入: [10,9,2,5,3,7,101,18]

輸出: 4

解釋: 最長的上公升子串行是 [2,3,7,101],它的長度是 4。

說明:可能會有多種最長上公升子串行的組合,你只需要輸出對應的長度即可。

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

高階: 你能將演算法的時間複雜度降低到 o(n log n) 嗎?

用動態規劃o(n^2)

狀態轉移方程好難想啊a。。。

dp[n-1]—>dp[n]

假設我們已經知道了 dp[0…4] 的所有結果,我們如何通過這些已知結果推出 dp[5] 呢?

nums[5] = 3,既然是遞增子串行,我們只要找到前面那些結尾比 3 小的子串行,然後把 3 接到最後,就可以形成乙個新的遞增子串行,而且這個新的子串行長度加一。

顯然,可能形成很多種新的子串行,但是我們只選擇最長的那乙個,把最長子序列的長度作為 dp[5] 的值即可。

class

solution

for(

int i=

0;i}int max=0;

for(

int i=

0;i)return max;

}}

300 最長上公升子串行

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。示例 輸入 10,9,2,5,3,7,101,18 輸出 4 解釋 最長的上公升子串行是 2,3,7,101 它的長度是4。說明 高階 你能將演算法的時間複雜度降低到 o n log n 嗎?思路 遍歷一遍給定陣列,維護乙個陣列dp,dp i ...

300 最長上公升子串行

建立dp表,dp i 表示含第i個數字的最長上公升子串行的長度 求dp i 時,向前遍歷找出比i元素小的元素j,則動態方程為dp i max dp i dp j 1 class solution object def lengthoflis self,nums size len nums if si...

300 最長上公升子串行

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。示例 輸入 10 9,2 5,3 7,101,18 輸出 4 解釋 最長的上公升子串行是 2,3,7,101 它的長度是 4。說明 可能會有多種最長上公升子串行的組合,你只需要輸出對應的長度即可。你演算法的時間複雜度應該為 o n2 高階 你能...