タイトル説明
リンク: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的最长递增子序列的长度