最長上公升子串行,經典

2021-10-24 09:53:49 字數 1075 閱讀 8090

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...