1234567891011121314151617181920212223242526272829303132 |
- func findNumberOfLIS(nums []int) int {
- n, max := len(nums), 1
- if n == 0 {
- return 0
- }
- dp := make([]int, n) // The number of LIS end with nums[i]
- length := make([]int, n) // The length of LIS ...
- dp[0], length[0] = 1, 1
- for i := 1; i < n; i++ {
- dp[i], length[i] = 1, 1
- for j := 0; j < i; j++ {
- if nums[j] < nums[i] {
- if l := length[j] + 1; l == length[i] {
- dp[i] += dp[j]
- } else if length[i] < l {
- if max < l {
- max = l
- }
- dp[i] = dp[j]
- length[i] = l
- }
- }
- }
- }
- res := 0
- for i := range dp {
- if length[i] == max {
- res += dp[i]
- }
- }
- return res
- }
|