【发布时间】:2023-03-13 04:49:01
【问题描述】:
我需要返回数组中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] ) ;
}
【问题讨论】:
-
你遇到了什么问题?
-
你应该尝试找到最小值,然后分配它
-
你可以在二次时间里暴力破解这个。
-
@Zom-B 您可以在线性时间内找到所有个完整递增的子序列,因为每个子序列都在前一个子序列结束后开始。没有必要“从头开始”来找到下一个递增的子序列,这将使它成为二次时间。
-
StackOverflow 不是为你做作业的网站。这不是问题,这是事实清单。