力扣300 最長遞增子串行(動態規劃)

2021-10-22 21:50:53 字數 1241 閱讀 9812

給你乙個整數陣列 nums ,找到其中最長嚴格遞增子串行的長度。

子串行是由陣列派生而來的序列,刪除(或不刪除)陣列中的元素而不改變其餘元素的順序。例如,[3,6,2,7] 是陣列 [0,3,1,6,2,2,7] 的子串行。

示例 1:

輸入:nums = [10,9,2,5,3,7,101,18]

輸出:4

解釋:最長遞增子串行是 [2,3,7,101],因此長度為 4 。

示例 2:

輸入:nums = [0,1,0,3,2,3]

輸出:4

示例 3:

輸入:nums = [7,7,7,7,7,7,7]

輸出:1

1 <= nums.length <= 2500

-104 <= nums[i] <= 104

高階:你可以設計時間複雜度為 o(n2) 的解決方案嗎?

你能將演算法的時間複雜度降低到 o(n log(n)) 嗎?

於是對於此類看樣子十分「繁雜」的問題我們可以考慮使用動態規劃思想來解決問題。這題與力扣最長連續子串行的個數類似。

dp[i] = max(dp[i],dp[j]+1)

max = max(dp[i],max)

所以可以得到狀態轉移方程:

dp[i] = max(dp[i],dp[j]+1); (j<=i-1)

class

solution

} res =

math

.max

(res,dp[i]);

}return res;

}}

int

max(

int x,

int y)

intlengthoflis

(int

* nums,

int numssize)

for(

int i=

0;i)int max = dp[0]

;for

(int i=

1;i) max =

max(max,dp[i]);

}return max;

}

力扣300 最長遞增子串行(動態規劃)

力扣300.最長遞增子串行 動態規劃 給你乙個整數陣列 nums 找到其中最長嚴格遞增子串行的長度。子串行是由陣列派生而來的序列,刪除 或不刪除 陣列中的元素而不改變其餘元素的順序。例如,3,6,2,7 是陣列 0,3,1,6,2,2,7 的子串行。示例 1 輸入 nums 10,9,2,5,3,7...

leetcode 300 最長遞增子串行 動態規劃

300 最長遞增子串行 想弄明白動態規劃建議看大佬的筆記 演算法書籍分享 class solution intlengthoflis vector int nums int res dp 0 for int i 1 i i res max res,dp i return res 大大的重點,核心的東...

300 最長遞增子串行

給你乙個整數陣列nums,找到其中最長嚴格遞增子串行的長度。子串行是由陣列派生而來的序列,刪除 或不刪除 陣列中的元素而不改變其餘元素的順序。例如,3,6,2,7 是陣列 0,3,1,6,2,2,7 的子串行。示例 1 輸入 nums 10,9,2,5,3,7,101,18 輸出 4 解釋 最長遞增...