300. 最长递增子序列

79 阅读1分钟

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

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

 

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/lo… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法:

func lengthOfLIS(nums []int) int {
    ans := 0
    // dp[i]=以i结尾的LIS长度
    // dp[i]的状态设置是关键
    dp := make([]int, len(nums))
    dp[0] = 1
    for i := 1; i < len(nums); i ++ {
        dp[i] = 1
        for j := 0; j < i; j ++ {
            if nums[j] < nums[i] {
                dp[i] = Max(dp[i], dp[j] + 1)
                if dp[i] > ans {
                    ans = dp[i]
                }
            }
        }
        
        if dp[i] > ans {
            ans = dp[i]
        }    
    }

    return ans
}

func Max(a, b int ) int {
    if a > b {
        return a
    }
    return b
}