public class MaxSortedDistance {
public static void main(String[] args) {
//无序数组排序后的最大相邻差
MaxSortedDistance maxSortedDistance = new MaxSortedDistance();
int[] array = {2,6,3,4,5,10,9};
System.out.println(maxSortedDistance.getMaxSortedDistance(array));
}
//常规解法
//先排序再遍历。算法的性能消耗主要在排序上,快速排序和堆排序时间复杂度都在nlog(n)
private int getMaxSortedDistance(int[] array) {
Arrays.sort(array);
int distance;
int max = 0;
for (int i = 0; i < array.length - 1; i++) {
distance = Math.abs(array[i] - array[i + 1]);
if (max < distance) {
max = distance;
}
}
return max;
}
//不排序
//使用计数排序思想
private int countSort(int[] array) {
int max = array[0];
int min = array[0];
//找出最大和最小值
for (int i = 0; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
}
if (array[i] < min) {
min = array[i];
}
}
//统计计数数组, 偏移量位min
int[] countArray = new int[max - min + 1];
for (int i = 0; i < array.length; i++) {
countArray[array[i] - min]++;
}
//判断0最多连续出现的次数,即为所求值
//记录当前最大的连续0的数量
int maxDistance = 0;
boolean valid = false;
//记录多个连续0的数量
int count = 0;
for (int i = 0; i < countArray.length; i++) {
if (countArray[i] == 1) {
//从值为1后的元素开始计算
valid = true;
}
if (valid) {
if (countArray[i] == 0) {
count++;
if (count > maxDistance) {
maxDistance = count;
}
} else {
count = 0;
}
}
}
return maxDistance + 1;
}
}
无序数组排序后的最大相邻差
最新推荐文章于 2022-04-12 18:11:32 发布