题目描述
对于一个数字序列,请设计一个复杂度为O(nlogn)的算法,返回该序列的最长上升子序列的长度,这里的子序列定义为这样一个序列U1,U2...,其中Ui < Ui+1,且A[Ui] < A[Ui+1]。
给定一个数字序列A及序列的长度n,请返回最长上升子序列的长度。
测试样例:
[2,1,4,3,1,5,6],7
返回:4
# -*- coding:utf-8 -*-
class AscentSequence:
def findLongest(self, A, n):
# write code here
# 预处理
dp = [0 for i in range(n + 1)]
dp[0] = 1
max = 1
for i in range(1, n):
k = 0
for j in range(n):
if A[i] > A[j] and k < dp[j]:
k = dp[j]
# 更新当前点的值
dp[i] = k + 1
if max < dp[i]:
max = dp[i]
return max
if __name__ == "__main__":
a = AscentSequence()
print a.findLongest([2,1,4,3,1,5,6], 7)
print a.findLongest([157,232,6],3)