问题描述:最大间隙问题:给定n个实数x1,x2,...,xn,求这n个数在实轴上相邻2个数之间的最大差值。假设对人格实数的下取整函数耗时O(1),设计解最大间隙的问题的线性时间算法。
算法设计:对于给定的n个实数x1,x2,...,xn,计算它们的最大间隙。
数据输入:输入数据由文件名为input.txt的文本文件提供。文件的第一行有一个正整数n,接下来的一行中有n个实数x1,x2,..,xn。
结果输出:将找到的最大间隙输出到文件output.txt。
输入文本示例 输出样本示例
input.txt output.txt
5 3.2
2.3 3.1 7.5 1. 5 6.3
解题思路:
开始时的思想是先排序,再找最大两个的相邻数的差值。但是排序的复杂度最好是O(nlogn),达不到线性。
看了一种方法是利用鸽笼原理,感觉很巧妙,先找到最大和最小数,这步复杂度是O(n),接着做最大最小·值得差,再除以n-1得到n-1的笼子,把除最大最小值的n-2的鸽子放进去,一定有一个笼子是空的,在同一个笼子的间距不可能是最大值,最大值一定在不同的两个笼子中,找到每个笼子的最大值和最小值和鸽子数,从最小的笼子开始找,用后一个有鸽子的笼子的最小