题目
给定一个未排序的整数数组,找到最长递增子序列的个数。
思路
加一个count数组,记录第几次遇到当前最长子序列,count[j]+1>count[i],则当前第一次遇到的最长的,count[j]+1 = count[i],则是当前遇到最长的且不是第一次遇到。
代码
class Solution:
def findNumberOfLIS(self, nums: List[int]) -> int:
if len(nums) == 0:
return 0
n = len(nums)
dp = [1]*n
count = [1]*n
for i in range(1,n):
for j in range(i):
if nums[j]<nums[i]:
if dp[j]+1 > dp[i]:
dp[i] = max(dp[i],dp[j]+1)
count[i] = count[j]
elif dp[j]+1 == dp[i]:
count[i] += count[j]
longest = max(dp)
count1 = 0
for i,c in enumerate (count):
if dp[i] == longest:
count1 += count[i]
return count1