码迷,mamicode.com
首页 > 其他好文 > 详细

最长递增子序列

时间:2018-08-16 10:43:51      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:val   长度   dma   反向   ret   rev   eve   序列   max   

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

最长递增子序列

标签:val   长度   dma   反向   ret   rev   eve   序列   max   

原文地址:https://www.cnblogs.com/narjaja/p/9484944.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!