最长递增子序列的数量

Number of Longest increasing subsequence

本文关键字:      更新时间:2023-10-16

我需要返回数组的LIS数。

伪代码示例:

if the arr is
 int []arr = {2,4,90,-3,-2,-1,-10,-9,-8};
num of LIS is: 3
 2,4,90
 -3,-2,-1
 -10,-9,-8

示例 2:

arr [] = {2,-3,4,90,-2,-1,-10,-9,-8};
num of LIS is: 4
2,4,90
-3,4,90
-3,-2,-1
-10,-9,-8

我尝试这样做:

int [] A = {2,4,90,-3,-2,-1,-10,-9,-8};
    int[] dp = new int[A.length];
    for (int i = 0; i < A.length; i++) {
        dp[i] = 1;
        for (int j = 0; j <= i - 1; j++) {
            if (A[j] < A[i]) {
                dp[i] = dp[i] + dp[j];
            }
        }
        System.out.println(dp[dp.length - 1] ) ;
    }

在你的代码中,你只是继续添加到 dp[i] 中,用于内部 for 循环中的所有查找。理想情况下,您应该找到所有位置(j <i)的子序列的最大大小,然后将该最大值添加到>

int maxSizeOfSubseq = 0;
for (int i = 0; i < A.length; i++) {
    dp[i] = 1;
    maxSizeOfSubseq = 0;
    for (int j = 0; j <= i - 1; j++) {
        if (A[j] < A[i] && dp[j] > maxSizeOfSubseq ) {
            maxSizeOfSubseq = dp[j];
        }
    }
    dp[i] = dp[i] + maxSizeOfSubseq ;
             System.out.println(dp[dp.length - 1] ) ;
}

// Now find the Max Size Of Subsequence amongst all computes subsequence lengths
maxSizeOfSubseq  = 0;
for(int count = 0 ; count < dp.length; ++count)
{
  if(dp[i] > maxSizeOfSubseq )
  {
  maxSizeOfSubseq  = dp[i]
  }
}
return maxSizeOfSubseq ;
相关文章:
  • 没有找到相关文章