请设计一个复杂度为O(n)的算法,计算一个未排序数组中排序后相邻元素的最大差值。
给定一个整数数组A和数组的大小n,请返回最大差值。保证数组元素个数大于等于2小于等于500。
测试样例:
[9,3,1,10],4
返回:6
import java.util.*;
public class MaxDivision {
public int findMaxDivision(int[] A, int n) {
// write code here
// 找到最大和最小
int max = A[0];
int min = A[0];
for(int i=1; i<n; i++){
if(A[i] > max) max = A[i];
if(A[i] < min) min = A[i];
}
// 桶排序,缩小桶的规格
int[] cnt = new int[max - min + 1];
for(int i=0; i<n; i++)
cnt[A[i] - min]++;
// 找出连续最多的,即为结果
int rst = 0;
int start = 0, end = 0;
for(int i=0; i<max-min+1; i++){
if(cnt[i] == 0) {
start = i;
end = i;
while(cnt[i] == 0){
end = ++i;
}
}
if(end - start > rst)
rst = end -start;
}
return rst + 1;
}
}
基本思路就是桶排序,技巧就是缩小桶的规格,其实看到复杂度为O(n),就应该想到桶排序