一、平台:数组中连续相等的元素就是一个平台。
二、最长平台:就是在所有平台中找出最长的那个。
三、方法不止一种,从完整程序思路,至少包含一个实现功能的函数及打印输出的函数。
下面是我写的演示代码:
遍历数组,找出最长平台,返回其在数组中起点和终点位置(返回值是指针数组)。异常直接抛出自行处理。
#include<stdio.h>
#define ML 20
int **findMaxG(int nums[],int len);//找出最长平台,并返回平台起始和结束的位置(指针数组)。异常返回NULL
int showMaxG(int *pMax[2]);//打印输出最长的平台。异常返回0
int main()
{
int **pMax=NULL;
int nums[ML]={1,1,2,3,3,3,4,5,6,6,7,7,7,7,8,8,8,9,10,10};
pMax=findMaxG(nums,ML);
return !showMaxG(pMax);
}
int showMaxG(int *pMax[2])
{
int *p0=pMax[0];
if(pMax[0]==NULL || pMax[1]==NULL || pMax[1]<pMax[0]) return 0;
printf("最长平台为:");
while(p0<=pMax[1])
printf("%d ",*p0++);
printf("\n");
return 1;
}
int **findMaxG(int nums[],int len)
{
static int *pMax[2];
int n=1,maxn=1,*p0=nums,*p1=nums;
if(len<=0) return NULL;
pMax[0]=pMax[1]=nums;
while(p0<&nums[len-1])
{
p1=p0+1;
while(p1<&nums[len-1])//统计当前平台长度
{
if(*p1!=*p0)//开始统计新的平台,之前平台在p1-1处结束
break;
else
n++,p1++;
}
if(n>maxn)
maxn=n,pMax[0]=p0,pMax[1]=p1-1;//记录最大的平台
p0=p1,n=1;//复位,准备统计下一个平台
}
return pMax;
}