题目:
给定一个未排序的整数数组 nums , 返回最长递增子序列的个数 。
注意 这个数列必须是 严格 递增的。
算法:
方法一:动态规划
func findNumberOfLIS(nums []int) int {
// dp[i][j]为以nums[i]结尾的子序列的最大长度,和最大长度的序列次数
dp := make([][]int, len(nums))
for i := range dp {
dp[i] = []int{1,1}
}
maxLength := 1
for i := 1; i < len(nums); i ++ {
for j := 0; j < i; j ++ {
if nums[j] < nums[i] {
newLength := dp[j][0] + 1
if newLength > dp[i][0] {
dp[i][0] = newLength
dp[i][1] = dp[j][1]
} else if newLength == dp[i][0] {
dp[i][1] = dp[i][1] + dp[j][1]
}
}
}
if dp[i][0] > maxLength {
maxLength = dp[i][0]
}
}
// fmt.Println(dp)
ans := 0
for i := range dp {
if dp[i][0] == maxLength {
ans = ans + dp[i][1]
}
}
return ans
}
func max(a, b int) int {
if a > b {
return a
}
return b
}