LeetCode300 最長上公升子串行

2022-08-11 08:57:12 字數 985 閱讀 9422

用dp[i]記錄以nums[i]結尾的最長上公升子串行的長度。

遍歷陣列,對於乙個數,從開頭遍歷到這個數的前乙個數,如果存在乙個(0 <= j <= i - 1),nums[j] < nums[i] 且 dp[j] > 1,

則可以考慮更新dp[i] ->dp[i] = max(dp[i], dp[j] + 1);表示nums[i]加在nums[j]後面組成了乙個新的上公升子串行,

當然,如果這個上公升子串行的長度不如原來那個以nums[i]結尾的子串行的長度,則dp[i]長度還是原來的子串行的長度。

如果nums[j]比nums[i]大,則nums[i]不能接在nums[j]後面組成乙個上公升子串行,則dp[i]不變 ->dp[i] = max(1, dp[i);

1表示nums[i]自己組成了乙個上公升子串行,顯然這個子串行長度為1.

再用乙個變數res記錄最長的上公升子串行的長度,每次更新dp[i]的時候也更新一下res ->res = max(res, dp[i]);

**如下:

class solution 

vectordp(size); // dp[i]表示以nums[i]作為結尾的最長上公升子串行的最大長度

dp[0] = 1;

int res = 1; // res是整個陣列中最長的上公升子串行的長度,最少也是1,表示最長上公升子串行只有乙個數

for(int i = 1; i < size; ++i) else

}res = max(res, dp[i]);

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