已知一个已经从小到大排好序的数组,这个数组的一个平台就是一连续的一串值到相等的元素,并且这一串元素不能再延伸,例如,在 [1,2,2,3,3,3,4,5,5,6]中[1],[2,2],[3,3,3],[4],[5,5],[6]都是平台,最长平台问题就是求一个排好序数组的最长平台
代码如下:
/**************************************************
*如果存在几个平台长度相等则取第一个
*函数入参:p:指向一个排好序的整形数组
* n:数组的长度
* from:出参,返回最长平台的左边界索引
* to:出参,返回最长平台的右边界索引
*************************************************/
void find_longest_plat(int *p,int n,int *from, int *to)
{
int i = 0;
int old_from = 0, old_to = 0;
int new_from = 0, new_to = 0;
/* 检查入参这里省略了。。 */
for (i = 0; i < n; i++)
{
if (p[i] == p[new_from])
{
new_to = i;
}
else
{
new_from = i;
new_to = i;
}
if ((new_to - new_from) >(old_to - old_from))
{
old_from = new_from;
old_to = new_to;
}
}
*from = old_from;
*to = old_to;
}