您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页力扣300题:最长递增子序列

力扣300题:最长递增子序列

来源:意榕旅游网

动态规划思路:

        1、dp[i]意为以nums[i]结尾的数组最大递增子序列长度为dp[i]

        2、dp[i]取决于dp[0-i)之间的最大值

        3、所以便利从nums[1]开始,且每个元素的初始dp值为1

        4、声明一个max找到最大值

        

int lengthOfLIS(int* nums, int numsSize){
    int dp[2500]={0};
    int max=0;
    for(int i=1;i<numsSize;i++){
        for(int j=0;j<i;j++){
            if(nums[i]>nums[j])
                dp[i]=fmax(dp[i],dp[j]+1);//找到当前项之前小于此值的项的最大dp值加1
        }
        max=max>dp[i]?max:dp[i];
    }
    return max+1;//因为开头将所有初始值赋为0,这里返回值加1就行
}

总结:方法很简单,每遍历一个值就回过头去找到小于这个值的值,看看其中最大的那个dp值是多少,当前dp值在次基础上+1就行。所以当前的dp值就等于了从第一个元素到当前元素的最大递增子序列的长度。

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

Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2

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

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