标签:程序 指南 大数 数组排序 大小 print 代码 ring sys
给定一个整形数组arr,返回排序后的相邻两数的最大差值。
时间复杂度为O(N)。
public class Main {
public static void main(String args[]) {
int[] arr= {9,3,1,10};
int maxGap=getMaxGap(arr);
System.out.println(maxGap);
}
public static int getMaxGap(int[] arr) {
if(arr.length<2) {
return 0;
}
int[] maxs=new int[arr.length+1];
int[] mins=new int[arr.length+1];
boolean[] hasElm=new boolean[arr.length+1];
int max=Integer.MIN_VALUE;
int min=Integer.MAX_VALUE;
for(int i=0;i<arr.length;++i) {
max=arr[i]>max?arr[i]:max;
min=arr[i]<min?arr[i]:min;
}
if(max==min) {
return 0;
}
for(int i=0;i<arr.length;++i) {
int bId=getBId(arr[i],arr.length,min,max);
maxs[bId]=hasElm[bId]?Math.max(arr[i], maxs[bId]):arr[i];//
mins[bId]=hasElm[bId]?Math.min(arr[i], mins[bId]):arr[i];//
hasElm[bId]=true;//
}
int preMax=maxs[0];
int maxGap=0;
for(int i=1;i<arr.length+1;++i) {
if(hasElm[i]) {
maxGap=mins[i]-preMax>maxGap?mins[i]-preMax:maxGap;
preMax=maxs[i];
}
}
return maxGap;
}
public static int getBId(long num,long len,long min,long max) {
return (int)((num-min)*len/(max-min));
}
}
[程序员代码面试指南]数组和矩阵问题-数组排序后相邻数的最大差值(桶排序思想)
标签:程序 指南 大数 数组排序 大小 print 代码 ring sys
原文地址:https://www.cnblogs.com/coding-gaga/p/10947149.html