您好,欢迎来到叨叨游戏网。
搜索
您的当前位置:首页动态规划29:673. 最长递增子序列的个数

动态规划29:673. 最长递增子序列的个数

来源:叨叨游戏网

解题步骤:

1.确定状态表示:dp[i]是什么

2.确定:dp[i]等于什么

3.:确保状态转移方程不越界

4.确定填表顺序:根据状态转移方程即可确定填表顺序

5.确定返回值

题目链接:

题解:

1.状态表示: len[i]表示以nums[i]结尾的最长递增子序列的长度

                      count[i]表示以nums[i]结尾的最长递增子序列个数

2.状态转移方程:见代码分析

3.初始化:len表和count表的最低值为1,所以在创建表时就将其全部初始化为1

4.填表顺序:从左向右依次填写

5.返回值:一次循环,遍历len表,如果当前len值大于已确定的最大长度,更新最大长度并记录返回值ans为count[i];如果当前len值等于已确定的最大长度,返回值ans+=count[i];否则无需更新

class Solution {
public:
    int findNumberOfLIS(vector<int>& nums) {
        //len[i]表示以nums[i]结尾的最长递增子序列的长度
        //如果存在nums[i]>nums[j] len[i]=max(len[i],len[j]+1)
        //如果不存在,len[i]=1
        //count[i]表示以nums[i]结尾的最长递增子序列个数
        //如果存在nums[i]>nums[j]并且len[j]+1>len[i] count[i]=count[j]
        //如果存在nums[i]>nums[j]并且len[j]+1=len[i] count[i]+=count[j]
        //如果存在nums[i]>nums[j]并且len[j]+1<len[i] 无需更新count[i]
        //如果不存在,count[i]=1
        size_t n=nums.size();
        //创建dp表
        vector<int> len(n,1),count(n,1);
        //初始化
        //len表和count表的最低值为1,所以创建表时就初始化
        //填表
        int ans=0,max=0;//max为最长递增子序列的长度
        for(int i=0;i<n;++i)
        {
            for(int j=0;j<i;++j)
            {
                if(nums[i]>nums[j])
                {
                    //更新count表
                    if(len[j]+1>len[i])
                    {
                        len[i]=len[j]+1;//更新len表
                        count[i]=count[j];//更新count表
                    }
                    else if(len[j]+1==len[i])
                    {
                        count[i]+=count[j];//更新count表
                    }               
                }
            }
            //返回值
            if(len[i]>max)
            {
                max=len[i];
                ans=count[i];
            }
            else if(len[i]==max)
            {
                ans+=count[i];
            }
        }
        //返回值
        return ans;
    }
};

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.net 版权所有 湘ICP备2024080961号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务