此问题来自《C语言名题精选百则》
问题1.1最长平台(plateau.c)
已知一个从小到大排序的数组,这个数组中的一个平台(plateau)是连续的一串值相同的元素,并且这一串元素不能再延伸,例如,在1,2,2,3, 3, 3, 4 ,5 ,5 ,6中1, 2.2, 3.3.3, 4, 5.5, 6都是平台,编写一个程序接收一个数组,把这个数组中平台最长的平台找出来,在上面的例子中,3,3,3就是数组中最长的平台。
需要考虑一下几点:
1.使用变量越少越好;
2.能否把数组的元素每一个都只查一次就得到结果?
3.程序语句越少越好。
我的想法是,用一个变量保存最长平台数值,再用一个变量保存最长平台长度,函数要返回这两个数值,就得用结构体
typedef struct{
int data;
int num;
}plateau;
如何计算平台长度?
当当前数值和前一个数值不相等时,统计前一个平台的长度,将这个长度和最长平台相比,如果大于最长平台,则将最长平台的数值和长度都保存为上一个平台的数值和长度,否则,当前值和前一个值相等,则将平台的长度+1;
if (arr[i] != arr[i-1] && length > max.num){
max.data &#