【动态规划】300. 最长递增子序列

300. 最长递增子序列

解题思路

  • 定义dpi 代表以numsi 为结尾的最大长子序列长度
  • base case : 状态数组全部为1
  • 遍历每一个数字的时候 最大子序列长度可能会变化,这个变化的值就是状态,那么定义dpi就是以numsi为结尾的最大子序列长度
  • 如何更新?
  • 计算numi 向前面寻找比numsi小的元素 然后看它的最大子序列长度,因为都计算出来了 子序列不要求连续 ,最后比较得到一个最大值
class Solution {
    public int lengthOfLIS(int[] nums) {
        // 定义dpi 代表以numsi 为结尾的最大长子序列长度

        int[] dp = new int[nums.length];
        Arrays.fill(dp,1);// dp输出全部初始化为1

        for(int i = 0; i < nums.length; i++){
            for(int j = 0; j < i; j++){
                // 向前面寻找比numsi小的子序列  然后添加 行程一个新的子序列
                if(nums[j] < nums[i]){
                    // 更新最长子序列
                    dp[i] = Math.max(dp[i],dp[j] + 1);
                }
            }
        }

        int res = 0;
        for(int i = 0; i < dp.length; i++){
            res= Math.max(res,dp[i]);
        }
        
        return res;
    }
}

你可能感兴趣的:(#,Leetcode,动态规划,算法)