673. Number of Longest Increasing Subsequence
Prerequisite
300. Longest Increasing Subsequenceclass Solution:
def findNumberOfLIS(self, nums: List[int]) -> int:
dp = [(1, 1) for _ in range(len(nums))]
LIS = 1
for i in range(1, len(nums)):
curr, count = 1, 0
# 先計算出當前的最長遞增子序列的最大長度為何
for j in range(i):
if nums[j] < nums[i]:
curr = max(curr, dp[j][0] + 1)
LIS = max(LIS, curr)
# 再去累加有哪些路徑可以到
# 1. 一定要比我當前值還小
# 2.
for j in range(i):
if nums[j] < nums[i] and dp[j][0] == curr - 1:
count += dp[j][1]
# 更新當前的最長遞增子序列和路徑組合
dp[i] = (curr, max(count, dp[i][1]))
ans = 0
for item in dp:
curr, count = item
if curr == LIS:
ans += count
return ansLast updated