件名の説明:
アレイ整数所与の疾患、最長の長さは、立ち上がりシーケンスを発見しました。
例:
入力:[10,9,2,5,3,7,101,18]
出力:4
説明:最長シーケンスが増加する[2,3,7,101]、その長さは4です。
説明:
様々な組み合わせを使用すると、出力のみに対応した長さを必要とする、シーケンスを増加させることができます。
あなたのアルゴリズムの時間計算量はO(N2)でなければなりません。
高度:あなたはOにアルゴリズムの時間の複雑さを軽減(N Nログ)行うことができますか?
Pythonコード
class Solution:
# 动态规划的思路:将 dp 数组定义为:以 nums[i] 结尾的最长上升子序列的长度
# 那么题目要求的,就是这个 dp 数组中的最大者
# 以数组 [10, 9, 2, 5, 3, 7, 101, 18] 为例:
# dp 的值: 1 1 1 2 2 3 4 4
def lengthOfLIS(self, nums: List[int]) -> int:
size = len(nums)
if size <= 1:
return size
dp = [1] * size
for i in range(1, size):
for j in range(i):
if nums[i] > nums[j]:
dp[i] = max(dp[i], dp[j] + 1)
return max(dp)