> 技术文档 > 【hot100-动态规划-300.最长递增子序列】

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


力扣300.最长递增子序列思路解析

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

动态规划思路
  1. 定义状态
    • 定义一个数组 dp,其中 dp[i] 表示以 nums[i] 结尾的最长递增子序列的长度。因为每个元素本身至少可以构成一个长度为 1 的递增子序列,所以 dp 数组的初始值都为 1。
  2. 状态转移方程
    • 对于每个位置 i,需要遍历它之前的所有元素 nums[j]j < i)。如果 nums[i] > nums[j],说明 nums[i] 可以接在 nums[j] 后面构成一个更长的递增子序列,此时 dp[i] 可以更新为 dp[j] + 1 和当前 dp[i] 中的较大值,即 dp[i] = Math.max(dp[i], dp[j] + 1)
  3. 最终结果
    • 遍历完整个数组后,dp 数组中的最大值即为最长递增子序列的长度。
复杂度分析
  • 时间复杂度O(n2)O(n^2)O(n2),其中