673. 最長遞增子序列的個數
阿新 • • 發佈:2020-08-19
class Solution { public int findNumberOfLIS(int[] nums) { int n = nums.length; int[] dp = new int[n]; Arrays.fill(dp,1); // dp[i] 以i結尾的最大長度 int[] count = new int[n]; // count[i] 以i結尾的最大長度的個數 Arrays.fill(count,1); int max = 1; for(int i = 0; i < n; i++) {for(int j = i - 1; j >= 0; j--) { if(nums[i] > nums[j]) { if(dp[j] + 1 > dp[i]) { //說明是新的最大長度 所以dp[i]count[i]都要更新 dp[i] = dp[j] + 1; count[i] = count[j]; } else if (dp[j] + 1 == dp[i]) { count[i]+= count[j]; } } } max = Math.max(max,dp[i]); } int res = 0; for(int i = 0; i < n; i++) { if(dp[i] == max) res += count[i]; } return res; } }