最长递增子序列(LIS)

来源:互联网 发布:台湾用大陆网络语言 编辑:程序博客网 时间:2024/06/14 03:27

题目描述

对于一个数字序列,请设计一个复杂度为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 maxif __name__ == "__main__":a = AscentSequence()print a.findLongest([2,1,4,3,1,5,6], 7)print a.findLongest([157,232,6],3)


0 0
原创粉丝点击