相邻数的最大间距

本文介绍了一种在O(N)时间复杂度内解决寻找一串数中相邻数最大间距的方法。通过避免排序,而是利用空间换取时间,将数值区间均分,找出每个小区间内的最大值和最小值,最终确定最大间距。示例代码展示了如何实现这一算法。
摘要由CSDN通过智能技术生成
一串数,求相邻的两个数的最大间距。如[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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值