C 确定阵列中最大递增序列的算法

C 确定阵列中最大递增序列的算法,c,arrays,algorithm,C,Arrays,Algorithm,我在Coursera学习C语言课程,在那里我遇到了一个作业,要求我写一段代码,可以告诉数组中的最大递增序列。例如,对于一个数组{3,5,0,7,8,9},它应该返回我3作为最大值。我写了两段代码,我假设这两段代码都可以通过。然而,他们中只有一个这样做了,我不知道为什么 下面是通过的第一段代码: 包括 包括 大小\u t maxSeqint*数组,大小\u t n{ 大小\u t最大长度=0; 计数器的大小=1; ifn==0{ 返回最大长度; } ifn==1{ maxLength=1; 返回最

我在Coursera学习C语言课程,在那里我遇到了一个作业,要求我写一段代码,可以告诉数组中的最大递增序列。例如,对于一个数组{3,5,0,7,8,9},它应该返回我3作为最大值。我写了两段代码,我假设这两段代码都可以通过。然而,他们中只有一个这样做了,我不知道为什么

下面是通过的第一段代码:

包括 包括 大小\u t maxSeqint*数组,大小\u t n{ 大小\u t最大长度=0; 计数器的大小=1; ifn==0{ 返回最大长度; } ifn==1{ maxLength=1; 返回最大长度; } forint i=1;i0{ 计数器+=1; }否则{ ifmaxLength<计数器{ maxLength=计数器; } 计数器=1; } } ifmaxLength<计数器{ maxLength=计数器; } 返回最大长度; } 这是第二段未通过的代码:

包括 包括 大小\u t maxSeqint*数组,大小\u t n{ int maxLength=0; int计数器=1; 如果n==0{ 返回最大长度; } ifn==1{ maxLength=1; 返回最大长度; } forsize_t i=1;i0{ 计数器+=1; ifcounter>=maxLength{ maxLength=计数器; }
}否则ifarray[i]-array[i-1]这两个代码实质上是等效的,并且对于示例输入,这两个代码都给出了正确的答案4,而不是3

n、counter、maxLength和i之间的类型差异产生了一种糟糕的代码味道,事实上,它们可能会导致两个代码在长度不能用int类型表示的输入上失败。但是,考虑到第一个代码已通过,这不可能是测试人员执行的问题


第二个代码的主要问题是它对输入数组产生不正确的结果0,使得最大的严格增加的子序列具有长度1。这是为什么这是一个练习。如果你在阅读代码时有困难,那么考虑使用调试。er来详细跟踪执行。

A take it您的意思是要确定数组元素的最大严格递增序列的长度。序列本身不能用单个数字来表示。在这种情况下,我不明白为什么{3,5,0,7,8,9}的预期结果是3。子序列{0,7,8,9}是严格递增的,长度为4。抱歉,最大递增序列的长度应为4。感谢您的回复。您对如何避免类型差异造成的问题有何建议?我们始终保持相同类型的相关变量是否明智?@FëanorTang,您应该确保在任何地方都选择相同的数据类型适合你把它们放进去的目的。这包括能够在你需要适应的范围内代表价值。我不会直截了当地说一个人应该总是与变量类型匹配,但通常你应该。当你不需要时,你应该能够解释为什么这是好的,并且作为一种风格,你应该强烈地考虑。把解释放在代码注释中。谢谢你的清晰解释。这真的很有帮助。