最長遞增子串行個數

2021-08-08 16:10:19 字數 1120 閱讀 8553

example 1

陣列[1,3,5,4,7] 最長遞增子串行有[1,3,5,7]與[1,3,4,7]兩個長度為4的陣列

example 2

陣列[2,2,2,2,3]最長遞增子串行為[2,3],有4個

使用dp演算法,給定陣列[nums],最長遞增子串行長度:

l(i) = max(l(j) + 1) if nums[j] < nums[i] for 1<=j < i

def

findnumberoflis

(nums):

n = len(nums)

dp = [[1,1] for i in range(n)]

#dp[i][0] 儲存以下標i結尾的陣列的最長遞增子串行長度

#dp[i][i] 儲存以下表i結尾的最長遞增子串行的個數

max_for_all = 1

#初始化最大個數

for i, value in enumerate(nums):

cur_max, count = 1, 0

#cur_max 儲存當前遞增序列長度count紀錄最長長度的個數

for j in range(i):#遍歷子問題

if nums[j] < value:

if dp[j][0]+1 > cur_max:

cur_max = dp[j][0]+1

#更新當前最大長度

count = 0

#如果需要更新那麼說明這個最大長度是第一次出現

if dp[j][0]+1 == cur_max:

#如果最大長度又出現了,加上之前已有的次數dp[j][1]

count+=dp[j][1]

dp[i] = [cur_max, max(count, dp[i][1])]#更新dp

max_for_all = max(cur_max, max_for_all)

return sum([item[1] for item in dp if item[0]==max_for_all])#計算最長長度出現的總次數

nums=[1,3,5,4,7]

print(findnumberoflis(nums))

#output:2

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。注意 給定...

最長遞增子串行

這是微軟實習生筆試遇到的,題意 求乙個陣列中最長遞增子串行的長度。要求選擇該題最好演算法的時間複雜度和空間複雜度。答案 時間複雜度o nlgn 空間複雜度o n 這題明顯用動態規劃來解。假設在目標陣列array 的前i個元素中,以array i 元素為最大元素的遞增子串行的長度是lis i 那麼 遞...

最長遞增子串行

最長遞增子串行又叫做最長上公升子串行 子串行,正如lcs一樣,元素不一定要求連續。本節討論實現三種常見方法,主要是練手。題 求乙個一維陣列arr i 中的最長遞增子串行的長度,如在序列1,1,2,3,4,5,6,7中,最長遞增子串行長度為4,可以是1,2,4,6,也可以是 1,2,4,6。方法一 d...