牛骨文教育服务平台(让学习变的简单)
博文笔记

数组的最大间隔

创建时间:2016-10-28 投稿人: 浏览次数:125

本总结是是个人为防止遗忘而作,不得转载和商用。

基本思想

         给定整数数组A[0…N-1],求这N个数排序后最大间隔。

         如:1,7,14,9,4,13的最大间隔为4。因为排序后:1,4,7,9,13,14,最大间隔是13-9=4

分析

         显然,对原数组排序,然后求后项减前项的最大值,即为解。

         但可否有更好的方法?

         有,这样做:

         假定N个数的最大最小值为max,min,则这N个数形成N-1个间隔,其最小值是(max-min)/(N-1)

         因此如果N个数完全均匀分布,则间距全部是(max-min)/(N-1)且最小;

         如果N个数不是均匀分布,间距不均衡,则最大间距必然大于(max-min)/(N-1)

         因此将N个数用间距 分成N-1个区间,则落在同一区间内的数不可能有最大间距。

         然后统计后一区间的最小值与前一区间的最大值的差即可。

         PS1:若没有任何数落在某区间,则该区间无效,不参与统计。

         PS2:使用时使用N个区间,因为假设最值为10、80,如果适用6个区间,则区间的大小为70/6=11.66,每个区间分别为:[10,21]、 [22,33]、 [34,44]、 [45,56]、 [57,68]、[69,80],存在大小为12的区间,比理论下界11.66大。

         PS3:这是借鉴桶排序/Hash映射的思想。

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。