美文网首页
Leetcode_300_最长上升子序列_hn

Leetcode_300_最长上升子序列_hn

作者: 1只特立独行的猪 | 来源:发表于2020-03-14 12:35 被阅读0次

题目描述

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

示例

示例 1:

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

说明

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

解答方法

方法一:动态规划

思路

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

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

转移方程: dp[i] = max(dp[i], dp[j] + 1) for j in [0, i)。

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

返回值
返回 dpdp 列表最大值,即可得到全局最长上升子序列长度。

代码

class Solution:
    def lengthOfLIS(self, nums: List[int]) -> int:
        if len(nums)==0:
            return 0
        dp = [1] * len(nums)
        for i in range(len(nums)):
            for j in range(i):
                if nums[i] > nums[j]:
                    dp[i] = max(dp[i], dp[j] + 1)
        return max(dp)

时间复杂度

O(n^2),遍历计算 dpdp 列表需 O(N)O(N),计算每个 dp[i]dp[i] 需 O(N)O(N)。

空间复杂度

O(N),dp列表占用线性大小额外空间。

相关文章

  • Leetcode_300_最长上升子序列_hn

    题目描述 给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例 示例 1: 输入: [10,9,2,5,3...

  • 公共子序列问题

    最长公共子序列 最长上升子序列 最长公共上升子序列

  • LintCode 最长上升子序列

    给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。 说明 最长上升子序列的定义: 最长上升子序列问...

  • LintCode 最长上升子序列

    题目 给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。 说明最长上升子序列的定义:最长上升子序列...

  • 最长上升子序列

    最长上升子序列(Longest Increasing Subsequence) 最长上升子序列方案数

  • LintCode 最长上升子序列

    题目 给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。说明最长上升子序列的定义:最长上升子序列问...

  • 76. 最长上升子序列

    描述 给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。 说明 最长上升子序列的定义: 最长上升子...

  • 76. 最长上升子序列

    给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。说明最长上升子序列的定义:最长上升子序列问题是在...

  • lintcode 最长上升子序列

    给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。说明最长上升子序列的定义:最长上升子序列问题是在...

  • 子序列问题

    最长公共子序列 最长上升/下降/不升/不降子序列

网友评论

      本文标题:Leetcode_300_最长上升子序列_hn

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