300. 最长递增子序列
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
思路:dp
- 确定dp函数以及下标含义:dp[i]表示以i结尾的子序列的最大长度
- 确定dp方程:一个字有两个状态,删除、不删除。dp[i] = max(dp[i],dp[j] + 1)
- 初始化:dp[i]=1
- 遍历顺序:从前到后
// 一个字有两个状态,删除、不删除
// dp[i]表示以i结尾的子序列的最大长度
// dp[i] = max(dp[i],dp[j] + 1)
func lengthOfLIS(nums []int) int {
n := len(nums)
dp := make([]int,n)
for i := range dp {
dp[i] = 1
}
dp[0] = 1
res := 1
for i := 1; i < n; i++{
for j := 0; j <= i; j++{
if nums[i] > nums[j] {
dp[i] = max(dp[i],dp[j] + 1)
}
}
res = max(res,dp[i])
}
return res
}
func max(x, y int)int{
if x > y{
return x
}
return y
}