• LeetCode 25.最长上升子序列 动态规划


    题目描述

    给定一个无序的整数数组,找到其中最长上升子序列的长度。

    示例:

    输入: [10,9,2,5,3,7,101,18]
    输出: 4
    解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
    说明:

    可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。
    你算法的时间复杂度应该为 O(n2) 。

    解题思路

    状态定义:

    dp[i]dp[i] 的值代表 nums 前 ii 个数字的最长子序列长度。
    转移方程: 设 j∈[0,i)j∈[0,i),考虑每轮计算新 dp[i]dp[i] 时,遍历 [0,i)[0,i) 列表区间,做以下判断:

    当 nums[i] > nums[j]nums[i]>nums[j] 时: nums[i]nums[i] 可以接在 nums[j]nums[j] 之后(此题要求严格递增),此情况下最长上升子序列长度为 dp[j] + 1dp[j]+1 ;
    当 nums[i] <= nums[j]nums[i]<=nums[j] 时: nums[i]nums[i] 无法接在 nums[j]nums[j] 之后,此情况上升子序列不成立,跳过。
    上述所有 1. 情况 下计算出的 dp[j] + 1dp[j]+1 的最大值,为直到 ii 的最长上升子序列长度(即 dp[i]dp[i] )。实现方式为遍历 jj 时,每轮执行 dp[i] = max(dp[i], dp[j] + 1)dp[i]=max(dp[i],dp[j]+1)。
    转移方程: dp[i] = max(dp[i], dp[j] + 1) for j in [0, i)。
    初始状态:

    dp[i]dp[i] 所有元素置 11,含义是每个元素都至少可以单独成为子序列,此时长度都为 11。
    返回值:

    返回 dpdp 列表最大值,即可得到全局最长上升子序列长度。
    复杂度分析:
    时间复杂度 O(N^2)O(N
    2
    ) : 遍历计算 dpdp 列表需 O(N)O(N),计算每个 dp[i]dp[i] 需 O(N)O(N)。
    空间复杂度 O(N)O(N) : dpdp 列表占用线性大小额外空间。

    作者:jyd
    链接:https://leetcode-cn.com/problems/longest-increasing-subsequence/solution/zui-chang-shang-sheng-zi-xu-lie-dong-tai-gui-hua-2/
    来源:力扣(LeetCode)

    代码如下

    class Solution {
      public int lengthOfLIS(int[] nums) {
            if (nums.length==0) {
                return 0;
            }
            
            int max=Integer.MIN_VALUE;
            int[] dp=new int[nums.length];
            Arrays.fill(dp, 1);
            for (int i = 0; i < dp.length; i++) {
                for (int j = 0; j < i; j++) {
                    if (nums[j]<nums[i]) {
                        dp[i]=Math.max(dp[i], dp[j]+1);
                    }
                }
            }
            Arrays.sort(dp);
             return dp[dp.length-1];
    
            }
    }
  • 相关阅读:
    解决:Could not resolve archetype org.apache.maven.archetypes
    Spring MVC配置MyBatis输出SQL
    Spring集成MyBatis 通用Mapper以及 pagehelper分页插件
    关于SpringMVC或Struts2接受参数接收不到的原因
    配置quartz启动时就执行一次
    ajaxFileUpload进行文件上传时,总是进入error
    spring mvc注入配置文件里的属性
    java中将一个文件夹下所有的文件压缩成一个文件
    flume failed to start agent because dependencies were not found in classpath
    ubuntu不能安装pip unable to install pip in unbuntu
  • 原文地址:https://www.cnblogs.com/Transkai/p/12492164.html
Copyright © 2020-2023  润新知