算法|最长递增自序列长度

最长递增自序列

问题

给你一个整数数组 A,找到其中最长严格递增子序列的长度。

子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

算法

构造board数组,令board[i]为记录以A[i]结尾的最长递增子序列的长度
因为每个元素自身也是子序列,因此board初始为全一数组;
对于任意两个board元素,若i>j,且A[i]>A[j],那么board[i]至少为board[j]+1;
由此可得board[i]为0~i-1中符合上述条件的board值+1。

代码

int solve(vector<int>& nums) {
        auto len=nums.size();
        vector<int> board(len,1);
        int max_v=1;
        for(int i=1;i<len;++i){            
            for(int j=0;j<i;++j){
                if(nums[i]>nums[j]&&board[j]>=board[i]){
                    board[i]=board[j]+1;
                }
            }
            max_v=max(max_v,board[i]);
        }
        return max_v;
    }
posted @ 2022-09-26 21:13  我的名字被占用  阅读(33)  评论(0)    收藏  举报