ID | Title | Difficulty | |
---|---|---|---|
Loading... |
673. Number of Longest Increasing Subsequence
Medium
LeetCode
Array, Dynamic Programming, Binary Indexed Tree, Segment Tree
Problem
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
- $-10^6 <= nums[i] <= 10^6$
Code
300. Longest Increasing Subsequence
class Solution {
public int findNumberOfLIS(int[] nums) {
int maxLen = 1;
int[] dp = new int[nums.length];
int[] count = new int[nums.length];
dp[0] = 1;
count[0] = 1;
for(int i = 1; i < nums.length; i++) {
dp[i] = 1;
int maxCount = 1;
for(int j = 0; j < i; j++) {
if(nums[j] < nums[i]) {
if(dp[j] + 1 == dp[i]) {
maxCount += count[j];
} else if (dp[j] + 1 > dp[i]) {
maxCount = count[j];
dp[i] = dp[j] + 1;
}
}
}
count[i] = maxCount;
maxLen = Math.max(maxLen, dp[i]);
}
int res = 0;
for(int i = 0; i < nums.length; i++) {
if(dp[i] == maxLen) {
res += count[i];
}
}
return res;
}
}
按 <- 键看上一题!
672. Bulb Switcher II
按 -> 键看下一题!
674. Longest Continuous Increasing Subsequence