leetcode 300 最長上公升子串行

2021-10-05 17:57:40 字數 858 閱讀 6018

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

示例:

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

輸出: 4

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

說明:

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

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

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

思路:經典動態規劃:

令dp[i]表示以a[i]結尾的最長不下降子串行長度。對a[i]來說會有如下兩種可能:

1)如果存在a[i]之前的元素a[j](jdp[i],即把a[i]跟在以a[j]結尾的lis後面時能比當前以a[i]結尾的lis長度更長(如果長度和之前相等,則不會加入,只有更長才會加入,即dp[j]+1>dp[i]),那麼就把a[i]跟在以a[j]結尾的lis後面,形成一條更長的lis序列,此時dp[i]=dp[j]+1。

2)如果a[i]之前的元素都比a[i]大,那麼a[i]就只好自己形成一條lis,長度為1。

3)邊界為dp[i]=1,即每次對i操作時假設每個a[i]自成乙個子串行。

狀態轉移方程:

dp[i]

=max

;(j=1,2…i-1&&a[j]

)

ac**:(c++)

class

solution

} maxlength =

max(maxlength, dp[i]);

}return maxlength;}}

;

LeetCode300 最長上公升子串行

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。示例 輸入 10,9,2,5,3,7,101,18 輸出 4解釋 最長的上公升子串行是 2,3,7,101 它的長度是4。說明 題目分析 方法一 動態規劃,用dp i 表示以nums i 結尾的最長上公升子串行。那麼如何求dp i 呢,只要看n...

Leetcode 300 最長上公升子串行

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。示例 輸入 10,9,2,5,3,7,101,18 輸出 4解釋 最長的上公升子串行是 2,3,7,101 它的長度是4。說明 高階 你能將演算法的時間複雜度降低到 o n log n 嗎?解題思路 1.普通演算法 動態規劃。假設陣列的前n個數...

leetcode 300 最長上公升子串行

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