Typescript-Algorithms
    Preparing search index...

    Variable longest_increasing_subsequenceConst

    longest_increasing_subsequence: (nums: number[]) => number = lengthOfLIS

    300.最长递增子序列

    给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

    子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。


    输入: nums = [10,9,2,5,3,7,101,18]

    输出: 4

    解释: 最长递增子序列是 [2,3,7,101],因此长度为 4。


    输入: nums = [0,1,0,3,2,3]

    输出: 4


    输入: nums = [7,7,7,7,7,7,7]

    输出: 1


    • 1 <= nums.length <= 2500
    • -10^4 <= nums[i] <= 10^4

    Type declaration

      • (nums: number[]): number
      • Parameters

        • nums: number[]

        Returns number

    dp[i] 表示以第i个数字结尾的最长递增子序列的长度 这道题里头dp[i]需要多次更新得到最终的值,它不是一次计算得到的。

    我们要判断以第i个数字为结尾的最长递增子序列的长度,我们可以思考: 以第i-1个数字为结尾的最长递增子序列,如果能够让nums[i]接后边,那么dp[i] = dp[i-1] + 1 但是这个思考不够完整,因为第i-1个位置的数字不一定能够被nums[i]接上。所以对于位置i,它还要继续查看是否能够接在i-2,i-3等等位置后边。 因为它有可能是从前面几个状态转移过来的。状态转移不一定是从相邻状态转移过来的