2023-07-21 Daily Challenge
Today I have done leetcode's July LeetCoding Challenge with cpp
.
July LeetCoding Challenge 21
Description
Number of Longest Increasing Subsequence
Given an integer array nums
, return the number of longest increasing subsequences.
Notice that the sequence has to be strictly increasing.
Example 1:
Input: nums = [1,3,5,4,7] Output: 2 Explanation: The two longest increasing subsequences are [1, 3, 4, 7] and [1, 3, 5, 7].
Example 2:
Input: nums = [2,2,2,2,2] Output: 5 Explanation: The length of the longest increasing subsequence is 1, and there are 5 increasing subsequences of length 1, so output 5.
Constraints:
1 <= nums.length <= 2000
-106 <= nums[i] <= 106
Solution
class Solution {
public:
int findNumberOfLIS(vector<int>& nums) {
if(nums.empty()) return 0;
vector<int> LIS(nums.size(), 1);
vector<int> ways(nums.size(), 1);
for(int i = 1; i < nums.size(); ++i) {
for(int j = 0; j < i; ++j) {
if(nums[j] < nums[i] && LIS[j]+1 > LIS[i]) {
ways[i] = ways[j];
LIS[i] = LIS[j] + 1;
} else if(nums[j] < nums[i] && LIS[j]+1 == LIS[i]) {
ways[i] += ways[j];
}
}
}
int LISLength = *max_element(LIS.begin(), LIS.end());
int ans = 0;
for(int i = 0; i < nums.size(); ++i) {
if(LIS[i] == LISLength) ans += ways[i];
}
return ans;
}
};
// Accepted
// 223/223 cases passed (217 ms)
// Your runtime beats 43.24 % of cpp submissions
// Your memory usage beats 66.65 % of cpp submissions (13.2 MB)