C 求最长递增子序列的长度
我用C编写了一些代码,给定一个序列,应该可以找到最长的递增子序列的长度。但是,如果不正确,它总是返回长度4 以下是我目前的代码:C 求最长递增子序列的长度,c,sequence,C,Sequence,我用C编写了一些代码,给定一个序列,应该可以找到最长的递增子序列的长度。但是,如果不正确,它总是返回长度4 以下是我目前的代码: int LIS(int* seq, int* temp_seq, int seq_size) {int i, j; for(i=0; i<seq_size; i++); { temp_seq[i]=0; } for(i=1; i<seq_size; i++); { for(j=1; j<seq_size; j++)
int LIS(int* seq, int* temp_seq, int seq_size)
{int i, j;
for(i=0; i<seq_size; i++);
{
temp_seq[i]=0;
}
for(i=1; i<seq_size; i++);
{
for(j=1; j<seq_size; j++)
{
if (seq[i]<temp_seq[j])
seq[i]=temp_seq[j];
else if (seq[i]>temp_seq[j])
seq[i]=temp_seq[j+1];
}
}
return(sizeof temp_seq);
}
int-LIS(int*seq,int*temp\u-seq,int-seq\u-size)
{int i,j;
for(i=0;itmp_seq
在函数定义中声明为指向类型int
的指针。因此,函数总是返回int*
的大小(在这种情况下,正好是4个字节)
返回错误的值。return(sizeof temp_seq);
是一个常量,指针的大小为temp_seq
(i=0;我看一下这里:一些方面不清楚。发布示例输入和预期输出。这种类型的行:seq[i]=temp_seq[j];是在原始序列上进行的,可能不是您想要做的。temp_seq[]唯一设置的地方是它的初始设置为所有0。这行:return(温度大小);返回指针temp_seq的大小,对于您的C实现,该值为4。代码应允许seq数字列表中的不连续性。例如,当a a时,我想我了解这一点,但我不确定该怎么办,您有什么建议吗?我是否需要做很多更改或我接近了?类似于什么?关于您的第一个suggestion,我对这个程序的规范的一部分是在它里面有“int*…”,所以我不能改变它。有一些事情你可以尝试。第一个是使用int-tmp_-seq[]
而不是int*tmp_seq
。第二件事是,当您发现某个元素是递增子序列的一部分时,您可以尝试保留一个递增的计数器。您需要为“max size”保留另一个计数器,用于确定当前子序列是大于还是小于上一个子序列。