力扣300 最長上公升子串行(有點難)

2021-09-26 21:50:20 字數 1128 閱讀 7895

題目:

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。

示例:輸入: [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 ...