給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。
示例:
輸入:定義求解問題:我們可以將dp[i]定義為:在輸入陣列num[i]時能夠找到的最長上公升子串行的長度;[10,9,2,5,3,7,101,18]
輸出:4解釋:最長的上公升子串行是[2,3,7,101],
它的長度是4
狀態轉移方程:轉態轉移就是根據子問題匯出當前問題的狀態。假設我們現在搜尋到dp[i],我們可以通過尋找num[0]~num[i-1]中比num[i]要小的數字。假如找到了num[k1]、num[k2]....、num[kn]符合條件。那麼dp[i] = max(dp[k],dp[k1],...dp[kn])+1;
邊界條件:由於我們是從num[0]開始往後遞推的,因此初始邊界只需要把dp[0] = 1即可。
#define max(a,b) (a>b?a:b)
int lengthoflis(int* nums, int numssize)
return res;
}
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...