您的位置:首页 > 其它

笔记——最长上升子序列

2017-08-19 09:41 411 查看
int bSearch(int num,int k)//返回可更新的位置,如  1 3 4 ,2->1 2 4 将k长度的上升子序列的尾巴更新到最小

{

    int low=1,high=k;

    while(low<=high)

    {

        int mid=(low+high)/2;

        if(num>=p[mid])

        low=mid+1;

        else

        high=mid-1;

    }

    return low;

}

int LIS(int n)

{

    int low=1,high=n;

    int k=1;

    for(int i=2;i<=n;++i)

    {

        if(p[i]>p[k])//若p[i]>p[k],上升子序列长度加1,p[i]变成尾巴

        p[++k]=p[i];

        else//若不是,则更新某一长度的尾巴

        {

            int pos=bSearch(p[i],k);

            p[pos]=p[i];

        }

    }

    return k;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: