Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 求最长递增子序列的长度_C_Sequence - Fatal编程技术网

C 求最长递增子序列的长度

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++)

我用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++)
     { 
       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;i
tmp_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”保留另一个计数器,用于确定当前子序列是大于还是小于上一个子序列。