Add leetcode 673

master
Kirigaya Kazuto 2021-11-17 15:38:10 +00:00
parent 9952c85bd1
commit f5ca3662ff
1 changed files with 43 additions and 0 deletions

43
LeetCode-CN/673.cpp Normal file
View File

@ -0,0 +1,43 @@
class Solution {
public:
int findNumberOfLIS(vector<int>& nums) {
int N = nums.size();
vector<pair<int, int>> dp(N); // 以i为结尾的LIS长度, 这个长度出现的次数
for (int i = 0; i < N; i++) {
dp[i] = { 1,1 };
}
for (int i = 1; i < N; i++) {
int count = 1;
int maxLastLen = 0;
for (int j = 0; j < i; j++) {
if (nums[i] > nums[j]) {
if (dp[j].first == maxLastLen)
{
count += dp[j].second;
}
else if (dp[j].first > maxLastLen) {
count = dp[j].second;
maxLastLen = dp[j].first;
}
}
}
dp[i].first = maxLastLen + 1;
dp[i].second = count;
}
int maxFirst = 0;
for (auto& p : dp) {
maxFirst = max(maxFirst, p.first);
}
int cntSecond = 0;
for (auto& p : dp) {
if (p.first == maxFirst) {
cntSecond += p.second;
}
}
return cntSecond;
}
};