題目:
給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。
示例:輸入: [10,9,2,5,3,7,101,18]
輸出: 4
解釋: 最長的上公升子串行是 [2,3,7,101],它的長度是 4。
思路:
題目中要我們求長度最長的遞增子串行,沒要求子串行必須連續。
假設dp(i)
表示以第i
個數字為結尾的最長上公升子串行的長度。即在[0, ..., i]
的範圍內,選擇以數字nums[i]
結尾獲得的最長上公升子串行的長度。關鍵字一點是以第i
個數字為結尾,即我們要求nums[i]
必須被選取。反正乙個子串行一定要以乙個數字結尾,那我就將狀態這麼定義,這一點是很重要的。
狀態轉移方程:遍歷第個i
的數的時候,我們應該[0, ... ,i - 1]
的 dp 都看一遍,如果當前的數nums[i]
大於之前的某個數,那麼nums[i]
就可以接在這個數後面形成乙個更長的 dp 。把前面的i
個數都看了, dp[i]
就是它們的最大值加 1。即比當前數要小的那些裡頭,找最大的,然後加 1 。
狀態轉移方程即:dp(i)= max( 1 + dp(j) 0<= j < i , nums[i] > nums[j])
最後不要忘了,應該掃瞄一遍這個 dp[i]
陣列,其中最大的就是我們所求的。
**:
class solution
int dp = new int[nums.length];
arrays.fill(dp,1);
for(int i=1;i力扣674-最長連續遞增序列
題目:給定乙個未經排序的整數陣列,找到最長且連續的的遞增序列。
class solution else
min=nums[i];
}return math.max(cnt,ant);
}}
力扣 300 最長上公升子串行
300.最長上公升子串行 給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。示例 輸入 10,9,2,5,3,7,101,18 輸出 4解釋 最長的上公升子串行是 2,3,7,101 它的長度是4思路 動態規劃 f i 表示從第乙個數字開始算,以nums i 結尾的最大上公升子串行 f i m...
力扣LeetCode 300 最長上公升子串行
給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。示例 輸入 10,9,2,5,3,7,101,18 輸出 4 解釋 最長的上公升子串行是 2,3,7,101 它的長度是 4。說明 可能會有多種最長上公升子串行的組合,你只需要輸出對應的長度即可。你演算法的時間複雜度應該為 o n2 高階 你能...
300 最長上公升子串行
給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。示例 輸入 10,9,2,5,3,7,101,18 輸出 4 解釋 最長的上公升子串行是 2,3,7,101 它的長度是4。說明 高階 你能將演算法的時間複雜度降低到 o n log n 嗎?思路 遍歷一遍給定陣列,維護乙個陣列dp,dp i ...