【動態規劃】上升數組中的最長上升子串問題

所謂的上升子串,要求子序列連續。如對於[3,2,4,5,3,6] ,應當返回3,對應的最長子串爲[2,4,5]。

定義狀態變量dp[i]:包括nums[i]在內的最長子串長度。
狀態轉移函數: 如果nums[i]>nums[i1]nums[i]>nums[i-1]dp[i]=dp[i1]+1dp[i]=dp[i-1]+1;否則dp[i]=1dp[i]=1

def maxAscendingArray(array):
    dps = [1 for _ in range(len(array))]

    maxLength = 1        # 記錄最長長度
    maxEndIndex = 0      # 記錄最長對應的索引
    for i in range(1, len(array)):
        if array[i] > array[i-1]:
            dps[i] = dps[i-1] + 1
            if dps[i] > maxLength:
                maxLength = dps[i]
                maxEndIndex = i

    return maxLength, array[maxEndIndex+1-maxLength:maxEndIndex+1]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章