最大间隙问题
问题描述:
给定n个实数x1,x2,...,xn,求这n个实数在实轴上相邻2个数之间的最大差值,要求设计线性的时间算法
看到这题第一感觉想排序,但是O(nlogn),明显大于O(n)
最后解这题用了鸽舍原理,就是把n-1个东西放到n个抽屉里,至少有一个抽屉是空的
在本题中就是,共有n个点,将这条线分成n-1段,设区间长度为总长度除以n-1,将除了左右端点之外的n-2个点放到这n-1个区间里,
至少一个区间是空的,而最大的相邻间隙就产生在左右区间中间有空的情况下而不是在一个区间里,只要找到下一个区间的左边界减去上一个区间的右边界最大值就可以了。
#include<bits/stdc++.h>
using namespace std;
#define inf 1<<30
#define m 10000
int n;
double num[m],maxn=-inf,minn=inf;
double maxx[m],mixx[m];
double left;
int book[m];
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
scanf("%d",&n);
for(int i=1