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;
        
    };
    

      

  • 相关阅读:
    编程原理
    VMware
    window的composer安装
    微信小程序支付的坑
    php 生成二维码
    接口文档在线编辑
    mysql函数的使用
    linux的反斜扛的问题
    require_once中使用./和../时遇到的坑
    微信测试账号申请后,登陆空白的现象
  • 原文地址:https://www.cnblogs.com/wang-130213/p/9038249.html
Copyright © 2011-2022 走看看