演算法策略 :動態規劃(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...