最长递增子序列
Posted narjaja
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最长递增子序列相关的知识,希望对你有一定的参考价值。
python代码
正向
def findMaxSubSequence(self):
list= self.sequence
n = len(list)
m = [1] * n #m[x]中存着list中0-x项中递增子序列的长度
for x in range(1,n):
for y in range (0,x): #list从前往后计算
if list[x] > list[y] and m[x] <= m[y]: # 计算m的x项 ,更新m的0~x-1项
m[x] += 1
subseq = []
max_value = max(m)
for i in range(n-1,-1,-1): #获取0-x项递增子序列
if m[i] == max_value:
subseq.append(list[i])
max_value -= 1
subseq.reverse()
return subseq
反向
def findMaxSubSequence(self):
list= self.sequence
n = len(list)
m = [0] * n #m[x]中存着list中x~n-1项中递增子序列的长度
for x in range(n-2, -1, -1):
for y in range(n-1, x, -1): #从list后往前计算
if list[x] < list[y] and m[x] <= m[y]: #计算m的x项,更新m的x-1~n-1项
m[x] += 1
max_value = max(m)
subseq = []
for i in range(n): # 获取x~n-1项递增子序列
if m[i] == max_value:
subseq.append(list[i])
max_value -= 1
return subseq
以上是关于最长递增子序列的主要内容,如果未能解决你的问题,请参考以下文章