相邻数的最大间距

一串数,求相邻的两个数的最大间距。如[1.3,3.1,2,5,5.4,6.1],最大间距是1.9,就是3.1、5的间距。时间复杂度要求O(N)。
简单的办法是排序,然后很容易就计算到了最大的间距,可是排序最快的时间复杂度是O(NlogN),不符合题目要求。
换一个思路,就是空间换时间,这里也没有对空间有要求。这里实现的算法就是多费了点内存,最后时间复杂度O(N),满足了要求。具体算法看以下代码。
package test;

import java.util.Arrays;


/**
 * 一串数,求相邻的两个数的最大间距。如[1.3,3.1,2,5,5.4,6.1],最大间距是1.9
 * @date 2014-4-14
 * @encode UTF-8
 * */
public class MaxGap {
	
	/**
	 * 计算一组数x中相邻数的最大间距
	 * </br>
	 * 算法:首先找到最大、最小数,则x所有数在这两个数构成的区间内。
	 * 将这个区间均分成n份(n是个数),则x中任意一个数在某区间内。
	 * 一个小区间内可能不含x的数,也可能包含多个,只记录该区间内的最大数、最小数。
	 * 再遍历各区间,两个都有数的区间之间的最大间距,也就是要求的最大间距。
	 * @warn x的长度>=2
	 * @param x 若干数
	 * */
	public double maxGap(double[]x){
		double min,max,avrGap;
		//y[2*j]是区间j最小数的下标,y[2*j+1]是最大数的下标
		int[]y=new int[2*x.length];
		Arrays.fill(y, -1);
		min=max=x[0]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值