排序练习题:相邻两数最大差值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序练习题:相邻两数最大差值相关的知识,希望对你有一定的参考价值。
有一个整形数组A,请设计一个复杂度为O(n)的算法,算出排序后相邻两数的最大差值。
给定一个int数组A和A的大小n,请返回最大的差值。保证数组元素多于1个。
测试样例:
[1,2,5,4,6],5
返回:2
public class Gap { public int maxGap(int[] A, int n) { // write code here if(null == A ||n<2) return 0; int min=Integer.MAX_VALUE; int max=Integer.MIN_VALUE; for(int i=0;i<n;i++){ if(A[i]>max) max=A[i]; if(A[i]<min) min=A[i]; } if(min==max) return 0; boolean[] hasNum =new boolean[n+1]; int[]maxs=new int[n+1]; int[] mins=new int[n+1]; for(int i=0;i<n;i++){ int bid=bucket(A[i],n,min,max); maxs[bid]=hasNum[bid]?Math.max(maxs[bid],A[i]):A[i]; mins[bid]=hasNum[bid]?Math.min(mins[bid],A[i]):A[i]; hasNum[bid]=true; } int res=0; int lastMax=0; int i=0; while(i<=n){ if(hasNum[i++]){ lastMax = maxs[i-1]; break; } } for(;i<=n;i++){ if(hasNum[i]){ res=Math.max(res,mins[i]-lastMax); lastMax=maxs[i]; } } return res; } public int bucket(long num,long length,long min,long max){ return (int)((num-min)*length/(max-min)); } }
以上是关于排序练习题:相邻两数最大差值的主要内容,如果未能解决你的问题,请参考以下文章
给定一个数组,求如果排序之后,相邻两数的最大差值,要求时 间复杂度O(N),且要求不能用非基于比较的排序