這道卡了我一天的題目。我自己想的思路是對的,但是沒能從紛雜的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 ...