zoukankan      html  css  js  c++  java
  • 673. 最长递增子序列的个数(动态规划)

    动态规划: 反向查找。

     1 class Solution {
     2     public int findNumberOfLIS(int[] nums) {
     3         int maxLen=0,res=0; //maxLen:递增子序列的最大长度,res:maxLen长递增子序列的个数
     4         int n=nums.length;
     5         //dp[k][0]:以nums[k]为尾的子序列的最大长度
     6         //dp[k][1]:以nums[k]为尾,dp[k][0]长的子序列的个数
     7         int[][] dp=new int[n][2];
     8         for(int k=0;k<n;k++){
     9             dp[k][0]=dp[k][1]=1; //初始化
    10             for(int i=k-1;i>=0;i--){
    11                 if(nums[k]>nums[i]){
    12                     if(dp[i][0]+1>dp[k][0]){ //存在更大长度,则更新最大长度及其个数
    13                         dp[k][0]=dp[i][0]+1;
    14                         dp[k][1]=dp[i][1];
    15                     }
    16                     else if(dp[i][0]+1==dp[k][0]){
    17                         dp[k][1]+=dp[i][1]; //存在相同最大长度,累计最大长度个数
    18                     }
    19                 }
    20             }
    21             if(maxLen<dp[k][0]) maxLen=dp[k][0]; //记录最大长度
    22         }
    23         for(int[] num:dp) res=num[0]==maxLen?res+num[1]:res; //计算最大长度总个数
    24         return res;
    25     }
    26 }

    p

  • 相关阅读:
    mysql-03
    mysql-02
    mysql-01
    RESTFUL设计风格
    mysql水平拆分和垂直拆分
    redis连环夺命问
    Python 的十大重要特性
    吊打--redis
    python2和3 的区别
    tornado第一段代码
  • 原文地址:https://www.cnblogs.com/NiBosS/p/12080716.html
Copyright © 2011-2022 走看看