最大间隙问题
来源:互联网 发布:相机推荐知乎 编辑:程序博客网 时间:2024/04/28 22:13
最大间隙问题:给定n 个实数x1 , x2 ,... , xn,求这n 个数在实轴上相邻2 个数之间的最大差值。假设对任何实数的下取整函数耗时O(1),设计解最大间隙问题的线性时间算法。 对于给定的n 个实数x1 , x2 ,... , xn,编程计算它们的最大间隙。
思路:
利用鸽笼原理,将n个鸽子放入n-1个笼子,必有一个笼子是空的。
首先找到这n个数中的最大值max和最小值min,将min到max之间的数等分成n-1段,将这n个数放置在相应的段中,记录每一段中最靠近左端点的值和最靠近右端点的值,最大间隙出现的位置肯定在两段之间,而不可能出现在某一段里面。
代码如下:
#include<stdio.h>#include<stdlib.h>int main(){int n;float* data;float* low;float* high;int index;float max_gap=0,temp;float max,min;int i;scanf("%d",&n);data=(float*)malloc(sizeof(float)*n);low=(float*)malloc(sizeof(float)*n);high=(float*)malloc(sizeof(float)*n);for(i=0;i<n;i++){scanf("%f",&data[i]);}max=data[0];min=data[0];for(i=1;i<n;i++){ if(data[i]>max) max=data[i]; if(data[i]<min) min=data[i];}for(i=0;i<n;i++){low[i]=max;high[i]=min;}for(i=0;i<n;i++){index=(data[i]-min)*(n-1)/(max-min);if(data[i]<low[index])low[index]=data[i];if(data[i]>high[index])high[index]=data[i];}for(i=0;i<n;i++){if(low[i]<=high[i])continue;index=i;while(low[i]>high[i])i++;temp=low[i]-high[index-1];if(max_gap<temp)max_gap=temp;}printf("%f",max_gap);return 0;}
- 最大间隙问题
- 最大间隙问题
- 最大间隙问题
- nuaa1330 最大间隙问题
- 最大间隙问题
- 最大间隙问题
- 最大间隙问题
- 最大间隙问题
- 最大间隙问题
- 最大间隙问题
- 最大间隙问题
- 最大间隙问题
- 最大间隙问题
- 最大间隙问题
- 最大间隙问题
- 最大间隙问题
- 最大间隙问题
- 最大间隙问题
- 从数列1,2,3.......n 中 随意取几个数,使其和等于 m
- Android创建和使用数据库详细指南(1)
- Android创建和使用数据库详细指南(2)
- Android创建和使用数据库详细指南(3)
- DOM、JDOM、DOM4J解析XML实例
- 最大间隙问题
- 超标量、超流水、超标量+超流水
- 六月,一个说再见的季节
- 在这创业的路上
- 11级_Java_曹建波6.12 触发器
- 计算对象Size的方法
- 大文件上传NeatUpload简单用法
- JVM 相关参数
- 链表