首页 > 其他 > 详细

673. 最长递增子序列的个数

时间:2020-03-19 16:05:38      阅读:28      评论:0      收藏:0      [点我收藏+]
 1 class Solution 
 2 {
 3 public:
 4     int findNumberOfLIS(vector<int>& nums) 
 5     {
 6         if(nums.size() == 0) return 0;
 7         int n = nums.size();
 8         vector<int> dp(n,1);
 9         vector<int> count(n,1);//以当前数结尾的组合数
10         int res = dp[0];
11         int ans = 0;
12         for(int i = 0;i < n;i ++)
13         {
14             for(int j = 0;j < i;j ++)
15             {
16                 if(nums[i] > nums[j]) 
17                 {
18                     if(dp[i] < dp[j] + 1)
19                     {
20                         dp[i] = dp[j] + 1;
21                         count[i] = count[j];
22                     }
23                     //dp[i]比dp[j]多1,说明dp[j]有重合数
24                     else if(dp[i] == dp[j] + 1) count[i] += count[j];
25                 } 
26             }
27             if(res < dp[i]) res = dp[i];
28         }
29         for(int i = 0;i < n;i ++)
30         {
31             if(dp[i] == res) ans += count[i];
32         }
33         return ans;
34     }
35 };

 

673. 最长递增子序列的个数

原文:https://www.cnblogs.com/yuhong1103/p/12524866.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!