673. Number of Longest Increasing Subsequence

https://leetcode.com/problems/number-of-longest-increasing-subsequence/discuss/107293/JavaC++-Simple-dp-solution-with-explanation

每次记载最大长度 然后最后遍历 把等于最大长度的index对应的record里记载的个数加起来

 

 1 class Solution {
 2     public int findNumberOfLIS(int[] nums) {
 3         if(nums.length == 0) return 0;
 4         if(nums.length == 1) return 1;
 5         int[] dp = new int[nums.length];
 6         int[] record = new int[nums.length];
 7         dp[0] = 1;
 8         record[0]++;
 9         int max = 1;
10         int numLen = 0;
11         for(int i = 1; i < nums.length; i++){
12             dp[i] = 1;
13             record[i] = 1;
14             for(int j = i-1; j >= 0; j--){
15                 if(nums[j] < nums[i]){
16                     if(dp[i] == dp[j]+1){
17                         record[i] += record[j];
18                     }else if(dp[j]+1 > dp[i]){
19                         record[i] = record[j];
20                         dp[i] = dp[j] + 1;
21                     }
22                 }      
23             }
24             max = Math.max(max, dp[i]);
25         }
26         int res = 0;
27         System.out.println(max);
28         for(int i = dp.length-1; i >= 0; i--){
29             if(dp[i] == max){
30                 res += record[i];
31             }
32         }
33         return res;
34         
35     }
36 }

 

posted @ 2018-10-30 10:15  jasoncool1  阅读(104)  评论(0编辑  收藏  举报