1. 程式人生 > 實用技巧 >673. 最長遞增子序列的個數

673. 最長遞增子序列的個數

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; } }