LeetCode 300 最長上公升子串行

2021-10-02 10:27:15 字數 1158 閱讀 6536

演算法策略 :動態規劃(dynamic programming)

給定乙個無序的整數序列,求出它最長上公升子串行的長度(要求嚴格上公升)

比如 [10,2,2,5,1,7,101,18] 的最長上公升子串行是 [2,5,7,101]、[2,5,7,18],長度是4

狀態定義

以nums[0] 10結尾的最長上公升子串行是10,所以dp(0) = 1

以nums[1] 2結尾的最長上公升子串行是2,所以dp(1) = 1

以nums[2] 2結尾的最長上公升子串行是2,所以dp(2) = 1

以nums[3] 5結尾的最長上公升子串行是2、5,所以dp(3) = dp(1) + 1 = dp(2) + 1 = 2

以nums[4] 1結尾的最長上公升子串行是1,所以dp(4) = 1

以nums[5] 7結尾的最長上公升子串行是2、5、7,所以dp(5) = dp(3) + 1 = 3

以nums[6] 101結尾的最長上公升子串行是2、5、7、101,所以dp(6) = dp(5) + 1 = 4

以nums[7] 18結尾的最長上公升子串行是2、5、7、18,所以dp(7) = dp(5) + 1 = 4

狀態轉義方程

實現

int

利用二分搜尋找出num最終要放入的牌堆位置index

num作為第index個牌堆的牌頂,top[index] = num

如果index等於len,相當於新建乙個牌堆,牌堆數量 +1,也就是len++

實現

int

lengthoflis

(int

nums)

else

} top[begin]

= num;

if(begin == len) len++;}

return len;

}

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...