class
solution
:def
lengthoflis
(self, nums: list[
int])-
>
int:
方法一,動態規劃
ifnot nums:
return
0 dp =[1
]*len(nums)
#dp以0位結尾的,最長上公升子串行長度為1
for i in
range(1
,len
(nums)):
for j in
range
(i):
if nums[i]
>nums[j]
: dp[i]
=max
(dp[i]
,dp[j]+1
)return
max(dp)
方法二,動態規劃+二分
top =
for i in
range
(len
(nums)):
left,right=0,
len(top)-1
while left<=right:
mid = left+
(right-left)//2
if top[mid]
: left = mid +
1else
: right = mid -
1#left表示在【0,len(top))的索引中,第乙個大於nums[i]的索引
時間複雜度n2-
>nlogn,空間複雜度都是n
經典DP 最長上公升子串行
題目描述 輸入 第一行乙個整數n n 1000 表示長度,第二行 n個數 a i 表示序列裡面的數,每個數不超過int範圍。輸出 一行 表示最長遞增子串行的長度 樣例輸入 6 1 6 2 5 4 7 樣例輸出 4 分析 這道題顯然是一道dp題,我們很容易想到定義f i 表示前i個數中,其中a i 必...
最長上公升子串行
問題描述 乙個數的序列bi,當b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串行 ai1,ai2,aik 這裡1 i1 i2 ik n。比如,對於序列 1,7,3,5,9,4,8 有它的一些上公升子串行,如 1,7 3,4,8 等等...
最長上公升子串行
最長上公升子串行問題是各類資訊學競賽中的常見題型,也常常用來做介紹動態規劃演算法的引例,筆者接下來將會對poj上出現過的這類題目做乙個總結,並介紹解決lis問題的兩個常用 演算法 n 2 和 nlogn 問題描述 給出乙個序列a1,a2,a3,a4,a5,a6,a7.an,求它的乙個子串行 設為s1...