该问题出自《C语言名题精选百则技巧篇》。大意是:找出一段有序数字中,找出最长而且连续的数字。比如在1,2,2,3,3,3,4,5,5,6中最长平台即为3,长度也是3。
我的代码如下:
#include <stdio.h>
#include <conio.h>
int main()
{
int i=0,L=0;
int result;
int x[]={1,2,2,3,3,3,4,5,5,5,5,6}; //in order
result=x[0];
int size=sizeof(x)/sizeof(int); //the number of the integer array
for(i=0;i+L<size;i++)
{
for(;;L++)
{
if(x[i]==x[i+L])
result=i;
else
break;
}
}
printf("%d",x[result]);
getch();
}
我的想法非常朴素:从第一个数开始,L初始为0,遍历寻找第一个数的长度。例子中第一个数长度为1,进入第二个数,得L=2。以此类推,在O(n2)的时间复杂度内得到结果。
但是书上的算法代码更少,时间复杂度却更低。
书中代码如下:
#include <stdio.h>
#include <conio.h>
int