12_6最长上升子序列LIS

这是一个经典的LIS(即最长上升子序列)问题,请设计一个尽量优的解法求出序列的最长上升子序列的长度。

给定一个序列A及它的长度n(长度小于等于500),请返回LIS的长度。

测试样例:
[1,4,2,5,3],5
返回:3

class LongestIncreasingSubsequence {
public:
    int getLIS(vector<int> A, int n) {
        // write code here
        vector<int> dp(n, 0);
        dp[0] = 1;
        int lis = 0;
        for(int i=1; i<n; ++i){
            int base = 0;
            for(int j=i-1; j>=0; --j){
                if(A[i] > A[j]){
                    base = dp[j] > base ? dp[j] : base;
                }
            }
            dp[i] = base + 1;
            lis = dp[i] > lis ? dp[i] : lis;
        }
        return lis;
    }
};

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 描述 给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。 说明 最长上升子序列的定义:最长上升子序...
    6默默Welsh阅读 701评论 1 0
  • 问题定义: 给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱)。例如:给定一个长度...
    miltonsun阅读 1,106评论 0 1
  • 对于下面一个序列: 2,1,5,3,6,4,8,9,7 求其最长递增子序列(可以不连续但顺序不可变) 解法一:动态...
    LamyGoGoGo阅读 1,246评论 0 0
  • 给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。 说明 最长上升子序列的定义: 最长上升子序列问...
    Arnold134777阅读 1,021评论 0 0
  • 题目 给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。 说明最长上升子序列的定义:最长上升子序列...
    六尺帐篷阅读 294评论 0 1