動的計画問題-最長増加部分列

タイトル説明

リンク:https//www.nowcoder.com/questionTerminal/585d46a1447b4064b749f08c2ab9ce66

数値のシーケンスの場合、シーケンスの最長昇順サブシーケンスの長さを返すように、O(nlogn)の複雑さを持つアルゴリズムを設計してください。ここでのサブシーケンスは、Ui <Ui +であるようなシーケンスU1、U2 ...として定義されます。 1、およびA [Ui] <A [Ui +1]。

数列Aシーケンスの長さnが与えられた場合、最長の昇順サブシーケンスの長さを返します。

問題解決のアイデア

動的計画法のアイデアを使用して、A [i]で終わる最長増加部分列を探し、A [i]が最大値であり、その長さをリストzに格納し、最後にzで最大値を返します。文字列Aの最長増加部分列の長さです。

# -*- coding:utf-8 -*-
 
class AscentSequence:
    def findLongest(self, A, n):
        # write code here
        z = [1]*n  #以A[i]结尾的最长递增子序列的长度
        for i in range(1,n):
            for j in range(0,i+1):
                if A[i]>A[j] and z[i]<z[j]+1:
                    z[i] = z[j] + 1
        return max(z) #字符串A的最长递增子序列的长度

 

おすすめ

転載: blog.csdn.net/qq_14997473/article/details/89302749