LeetCode 673 最長遞增子串行的個數

2021-10-07 02:12:49 字數 1238 閱讀 9251

這道卡了我一天的題目。我自己想的思路是對的,但是沒能從紛雜的if else中得到正確的結果,最後還是向官方題解妥協了。

給定乙個未排序的整數陣列,找到最長遞增子串行的個數。

不要求子串行是連續的。

最開始我設想用一維dp陣列,dp[i]代表從0-i這一段最長子序列的個數,發現並不好找遞迴方程。因為從i倒著比較0-i-1這些位置的最長子序列,只有最長子序列的個數(count)是不夠的,起碼還得知道最長子序列是有多長吧(length)。

於是設定length[i]為以i為結尾的最長子序列的長度,count[i]為結尾的最長子序列的個數。

那麼,假設i < j:

class

solution

:def

findnumberoflis

(self, nums)

: n =

len(nums)

if n <=1:

return n

length =[1

]* n

count =[1

]* n

for j in

range

(n):

for i in

range

(j):

if nums[j]

> nums[i]

:if length[i]

>= length[j]

: length[j]

= length[i]+1

count[j]

= count[i]

elif length[i]+1

== length[j]

: count[j]

+= count[i]

elif nums[j]

== nums[i]

:if length[i]

< length[j]

: length[i]

= length[j]

count[i]

= count[j]

max_len =

max(length)

return

sum(c for i, c in

enumerate

(count)

if length[i]

== max_len)

leetcode 673 最長遞增子串行的個數

給定乙個未排序的整數陣列,找到最長遞增子串行的個數。示例 1 輸入 1,3,5,4,7 輸出 2 解釋 有兩個最長遞增子串行,分別是 1,3,4,7 和 1,3,5,7 示例 2 輸入 2,2,2,2,2 輸出 5 解釋 最長遞增子串行的長度是1,並且存在5個子序列的長度為1,因此輸出5。分析 舉個...

LeetCode 673 最長遞增子串行的個數

給定乙個未排序的整數陣列,找到最長遞增子串行的個數。示例 1 輸入 1,3,5,4,7 輸出 2 解釋 有兩個最長遞增子串行,分別是 1,3,4,7 和 1,3,5,7 示例 2 輸入 2,2,2,2,2 輸出 5 解釋 最長遞增子串行的長度是1,並且存在5個子序列的長度為1,因此輸出5。dp i ...

leetcode673 最長遞增子串行的個數

題目 這道題有點貪心?最優規劃?動態規劃?我也不知道叫啥了。就是從前往後算,後者的計算需要用到前者的值 原本想法,找到各個點的當前最長長度,找到最長的幾個值,然後倒推,後來覺得倒推太費時間,能不能在取最長值的時候,就把解拿到 就有了下面的 如果只要求最長長度 只需要int maxs new int ...