300 最長上公升子串行

2021-10-24 01:13:25 字數 1090 閱讀 7945

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

示例:

輸入:[10,

9,2,

5,3,

7,101,18]

輸出:4

解釋: 最長的上公升子串行是 [2,

3,7,

101],它的長度是 4。

說明:可能會有多種最長上公升子串行的組合,你只需要輸出對應的長度即可。

你演算法的時間複雜度應該為 o(n2) 。

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

public

class

solution

int[

] dp =

newint

[nums.length]

; dp[0]

=1;int maxans =1;

for(

int i =

1; i < dp.length; i++)}

dp[i]

= maxval +1;

maxans = math.

max(maxans, dp[i]);

}return maxans;

}}

時間複雜度:o(n^2),

其中 n 為陣列nums 的長度。動態規劃的狀態數為 n,計算狀態 dp[i] 時,需要 o(n) 的時間遍歷 dp[0…i−1] 的所有狀態,所以總時間複雜度為 o(n^2)

空間複雜度:o(n),需要額外使用長度為 n 的dp 陣列。

class

solution

else r = mid -1;

} d[pos +1]

= nums[i];}

}return len;}}

;

時間複雜度:o(nlogn)。陣列 nums 的長度為 n,我們依次用陣列中的元素去更新 dd 陣列,而更新 d 陣列時需要進行 o(logn) 的二分搜尋,所以總時間複雜度為 o(nlogn)。

空間複雜度:o(n),需要額外使用長度為 n 的 d 陣列。

300 最長上公升子串行

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。示例 輸入 10,9,2,5,3,7,101,18 輸出 4 解釋 最長的上公升子串行是 2,3,7,101 它的長度是4。說明 高階 你能將演算法的時間複雜度降低到 o n log n 嗎?思路 遍歷一遍給定陣列,維護乙個陣列dp,dp i ...

300 最長上公升子串行

建立dp表,dp i 表示含第i個數字的最長上公升子串行的長度 求dp i 時,向前遍歷找出比i元素小的元素j,則動態方程為dp i max dp i dp j 1 class solution object def lengthoflis self,nums size len nums if si...

300 最長上公升子串行

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。示例 輸入 10 9,2 5,3 7,101,18 輸出 4 解釋 最長的上公升子串行是 2,3,7,101 它的長度是 4。說明 可能會有多種最長上公升子串行的組合,你只需要輸出對應的長度即可。你演算法的時間複雜度應該為 o n2 高階 你能...