您的位置:首页 > 其它

最大间隙问题。给定 n 个实数,求这n个实数在数轴上相邻2个数之间的最大差值,设计解最大间隙问题的线性时间算法。

2016-12-26 23:05 363 查看
问题描述

最大间隙问题。给定 n 个实数,求这n个实数在数轴上相邻2个数之间的最大差值,设计解最大间隙问题的线性时间算法。

input

5

3 2
5 10 45

output

30

#include<stdio.h>
#include<stdlib.h>

int main()
{
int n,i,*a;
printf("input the number of the numbers\n");
scanf("%d",&n);
a=(int *)malloc(n*sizeof(int));
printf("input the numbers\n");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
//int tag
,low[count],high[count],temp=0,index;
int count=n-2+1;
int *tag=(int*)malloc(sizeof(int)*count);
int *low=(int*)malloc(sizeof(int)*count);
int *high=(int*)malloc(sizeof(int)*count);
int min=a[0],max=a[0],index,temp=0;

for(i=0;i<n;i++)
{
min=min<a[i]?min:a[i];
max=max>a[i]?max:a[i];
}
for(i=0;i<count;i++)
{
tag[i]=0;
low[i]=max;
high[i]=min;
}
low[0]=min;
tag[0]++;
high[count-1]=max;
tag[count-1]++;
int distance=(max-min)/count;
for(i=0;i<n;i++)
{
index=(a[i]-min)/distance;
low[index]=low[index]<a[i]?low[index]:a[i];
high[index]=high[index]>a[i]?high[index]:a[i];
tag[index]++;
}

int left=high[0];
for(i=0;i<count;i++)
{
if(tag[i]!=0)
{
if(low[i]-left>temp)
temp=low[i]-left;
left=high[i];
}
}
for(i=0;i<count;i++)
{
printf("%d\t",low[i]);
}
printf("\n");
for(i=0;i<count;i++)
{
printf("%d\t",high[i]);
}
printf("\nthe max is %d\n",temp);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 最大间隙
相关文章推荐