zoukankan      html  css  js  c++  java
  • 最长递增子序列

    最长递增子序列问题是个蛮典型的动态规划问题,相关也有很多人写过文章,经过理解的话,自己整理如下:

    1  DP问题要找到当前问题与子问题:以dp[]数组记录各个位置[i]处数字为最后一个数字的最长序列,

                      当前问题:dp[i],与子问题的联系为,比子问题的长度+1

                      子问题:max{dp[0~i-1]}

    2. 如何得到子问题的结果:依赖于[i]处数字可以support的数值,即比[i]处数字小且位于0~i-1位置的数字

    根据这两点,我们得到了问题的解决办法:①得到[i]的支撑数组②dp求解

    相应代码如下:

    class Solution{
    public:
        int getLongestSeq(vector<int> arr){
            int size=arr.size();
            vector<int> len(size,1);
            vector<vector<int> > connect(size,vector<int>());
            //将与当前数字相关的前边的index存储,以转化子问题时可以直接使用
            for(int i=0;i<size;i++){
                for(int j=0;j<i;j++){
                    if(arr[j]<arr[i])
                        connect[i].push_back(j);
                }
            }
            for(int i=0;i<size;i++){
                int addition=0;
                for(vector<int>::iterator it=connect[i].begin();it!=connect[i].end();it++){
                    if(addition<len[*it])
                        addition=len[*it];
                }
                len[i]=addition+1;
            }
            int result=1;
            for(int i=0;i<size;i++){
                if(result<len[i])
                    result=len[i];
            }
            return result;
        }
    };
  • 相关阅读:
    如何在三维坐标中选择点
    java slider
    java combobox 多选框
    java BorderFrame.java
    java radioButton
    java checkbox
    java 文本窗口
    constexpr
    测试框架
    java 计算器
  • 原文地址:https://www.cnblogs.com/KarayLee/p/4801110.html
Copyright © 2011-2022 走看看