300. 最长递增子序列(动态规划)

动态规划:

  • 状态定义:dp[i]表示以索引为第i个字符结尾的最长递增子序列的长度,d[n-1]表示以第n-1个字符作为结尾的最长递增子序列的长度,但是这并不是答案,因为整个序列中的最长递增子序列不一定以n-1结尾,所以应该取出dp数组中的最大值。
  • 状态转移:想要求dp[i]的值,遍历0-i之间的dp[j],如果nums[i]>nums[j],则表示第i个字符可以嵌在第j个字符后面,dp[i]=dp[j]+1,不断遍历jdp[i]取遍历过程中的最大值即可,即dp[i] = Math.max(dp[i], dp[j] + 1)
  • 状态初始化:nums的长度最小为1,表示最少有一个数字,dp[0]表示以第一个字符为结尾的最长递增子序列的长度,dp[0]=1,而其他所有位置的数字都至少存在一个只包含自身的最长递增子序列,因此dp数组中所有初始值都应该设置成dp[i]=1
class Solution {
   
    public int lengthOfLIS(int[] nums) {
   
        int maxLen = 1;
        int n = nums.length;
        int[] dp = new int[n];
        Arrays.fill(dp, 1);
        for (int i = 1; i < n; ++i) {
   
            for (int j = 0; j < i; ++j) {
   
                if (nums[i] > nums[j]) dp[i] = Math.max(dp[i], dp[j] + 1);
            }
            maxLen = Math.max(maxLen, dp[i]);
        }
        // return dp[n];
        return maxLen;
    }
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-28 10:44:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-28 10:44:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-28 10:44:02       82 阅读
  4. Python语言-面向对象

    2024-01-28 10:44:02       91 阅读

热门阅读

  1. 关系运算和逻辑运算

    2024-01-28 10:44:02       50 阅读
  2. 1.27学习总结

    2024-01-28 10:44:02       45 阅读
  3. 第八章 对象、类与面向对象编程 第四节——类

    2024-01-28 10:44:02       42 阅读
  4. 代码随想录算法训练营|day17

    2024-01-28 10:44:02       72 阅读
  5. OpenCV 1 - 加载 显示 修改 保存图像

    2024-01-28 10:44:02       48 阅读
  6. 文旅游戏的多元应用场景

    2024-01-28 10:44:02       57 阅读
  7. Mysql的备份以及恢复

    2024-01-28 10:44:02       49 阅读
  8. wsl装ubuntu的home目录在哪,如何更改home?

    2024-01-28 10:44:02       48 阅读
  9. 优雅的管理你的docker容器【Docker Swarm篇】

    2024-01-28 10:44:02       44 阅读