题目:
给你一个整数数组 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
}