C# 最长递增子序列数
我需要返回数组的C# 最长递增子序列数,c#,java,c++,c,C#,Java,C++,C,我需要返回数组的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
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] ) ;
}
int[]A={2,4,90,-3,-2,-1,-10,-9,-8};
int[]dp=新的int[A.长度];
for(int i=0;i 对于(int j=0;j在代码中,对于内部for循环中的所有查找,您只需不断向dp[i]中添加。理想情况下,您应该找到所有位置的子序列的最大大小(j
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 ;
int-maxSizeOfSubseq=0;
for(int i=0;imaxSizeOfSubseq)
{
maxSizeOfSubseq=dp[i]
}
}
返回maxSizeOfSubseq;
您面临的问题是什么?您应该尝试找到最小值,然后分配它。您可能可以在二次时间内强制执行此操作。@Zom-B您可以在线性时间内找到所有完整的递增子序列,因为每个子序列都是在前一个序列结束后开始的。无需“从头开始”找到下一个递增的子序列,这将使其成为二次时间。StackOverflow不是为您做家庭作业的网站。这不是问题,这是一个事实列表。它不起作用。例如arr[]={2,-3,4,90,-2,-1,-10,-9,-8}你确定它应该是4吗?看起来有3个递增的子序列,所有的长度都是3,2和3,对我来说:-3,4,90;-2,-1;-10,-9,-8。[2,4,90],-3,4,90],-3,-2,-1],-10,-9,-8]谢谢,但是…它仍然不起作用..你在混合示例。我也只看到了3个子序列。请澄清要使用的数据。@agamoti你面临什么问题..你试过调试它吗?