最大间隙问题
问题描述:给定n个实数x1,x2,...,xn,求这n个实数在实轴上相邻2个数之间的最大差值,要求设计线性的时间算法 ;
算法思想:
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int len1,len2,n;
double s[100],l[105],h[105];
int cnt[105];
int Min,Max;
double gap()
{
int i;
Min=Max=0;
double tmp1,tmp2;
tmp1=tmp2=s[1]; //确定最大最小界限
for (i=2;i<=n;i++)
{
if (s[i]>tmp1)
{
tmp1=s[i];
Max=i;
}
if (s[i]h[bucket])
h[bucket]=s[i];
}
double left,gap,ans=0;
left=h[1]; //寻找最大间距,对本区间的上界与下个区间的下界进行依次比较
for (i=2;i<=n;i++) //关键思想是要知道怎么确定最大区间
if (cnt[i])
{
gap=l[i]-left;
if (gap>ans)
ans=gap;
left=h[i];
}
return ans;
}
int main()
{
int i,j;
while (~scanf("%d",&n))
{
for (i=1;i<=n;i++)
scanf("%lf",&s[i]);
printf("%.2lf\n",gap());
}
return 0;
}