zoukankan      html  css  js  c++  java
  • 动态规划------最长递增子序列

    时间复杂度: O(NlogN)

    class AscentSequence {
    public:
        int findLongest(vector<int> A, int n) {
            //B数组,是存储对应长度i的LIS的最小末尾
            vector<int> B;
            B.push_back(A[0]);
            for(int i=1;i<n;i++){
                if(A[i]>B.back()){
                    B.push_back(A[i]);
                    continue;
                } 
                else 
                    B[findPos( B , A[i])]= A[i];
            }
            return B.size();
        }
        //找到B中第一个比A[i]大的数的位置,二分法 O(logN)
    private:
        int findPos(vector<int> B ,int num)
        {
            int left=0,right=B.size();
            while(left<right){
                int mid=left+(right-left)/2;
                if(B[mid]>num) right=mid;//!!!!!!!!!
                else if(B[mid]<num) left=mid+1;
                else return mid;
            }
            
            return left;
        }
    };

    时间复杂度 O(N^2)

    class AscentSequence {
    public:
        int findLongest(vector<int> A, int n) {
            // write code here
     
            vector<int> tmp(n,1);
            for(int i=0;i<n;++i){
                
                for(int j=0;j<=i;++j){
                    if(A[i]>A[j] && tmp[i]<tmp[j]+1)
                        tmp[i]=tmp[j]+1;
                }
             }
            int tmax=tmp[0];
            for(int i=0;i<n;i++){
                tmax=max(tmp[i],tmax);
            }
            return tmax;
        
    };
    

      

  • 相关阅读:
    this和$(this)的关系
    单色边表格
    php概率算法
    jQuery Ajax 参数解析
    拍拍CPS入门使用
    飞鸽端口被占
    浏览器调试工具技巧分享
    事件click,bind,click
    jQuery旋转插件—rotate
    利用谷歌API生成二维码
  • 原文地址:https://www.cnblogs.com/wang-130213/p/9038249.html
Copyright © 2011-2022 走看看