美文网首页算法
LeetCode题解:最长递增子序列

LeetCode题解:最长递增子序列

作者: 搬码人 | 来源:发表于2022-05-20 10:01 被阅读0次

    题目描述

    给你一个整数数组nums,找到其中最长严格递增子序列的长度。
    子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。

    示例

    输入:nums = [10,9,2,5,3,7,101,18]
    输出:4
    解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。

    思路方法

    动态规划
    创建一个与nums等长的数组dp[ ],dp中记录的是从开始到当前节点的最长递增子序列。
    从nums数组的最左端开始遍历,若发现比之前的数组值大则进行一次判断dp[i] = Math.max(dp[i],dp[j]+1),之前节点值+1 与当前节点值进行比较并取最大值,记录下当前的最长子序列maxVal = Math.max(maxVal,dp[i])。
    由于该方法是从最左端开始,并且每次是两两比较最大值,所以不存在重复问题。

    class Solution {
        public int lengthOfLIS(int[] nums) {
            int length = nums.length;
            if(length==0){
                return 0;
            }
            int maxVal = 1;
            int[] dp = new int[length];
            dp[0] = 1;
            for(int i=1;i<length;i++){
                dp[i] =1;
                for(int j=0;j<i;j++){
                    if(nums[i]>nums[j]){
                        dp[i] = Math.max(dp[i],dp[j]+1);
                    }
                }
                maxVal = Math.max(maxVal,dp[i]);
            }
            return maxVal;
        }
    }
    

    相关文章

      网友评论

        本文标题:LeetCode题解:最长递增子序列

        本文链接:https://www.haomeiwen.com/subject/uuztprtx.html