####題目 數組排序以後相鄰數的最大差值 ####java代碼java
package com.lizhouwei.chapter8; /** * @Description: 數組排序以後相鄰數的最大差值 * @Author: lizhouwei * @CreateDate: 2018/5/9 21:56 * @Modify by: * @ModifyDate: */ public class Chapter8_26 { public int maxGap(int[] arr) { int max = Integer.MIN_VALUE; int min = Integer.MAX_VALUE; int len = arr.length; int maxGap = 0; for (int i = 0; i < arr.length; i++) { max = Math.max(max, arr[i]); min = Math.min(min, arr[i]); } boolean[] hasNum = new boolean[len + 1]; int[] maxs = new int[len + 1]; int[] mins = new int[len + 1]; int index = 0; for (int i = 0; i < arr.length; i++) { index = bucket(arr[i], max, min, len); maxs[index] = hasNum[index] ? Math.max(maxs[index], arr[i]) : arr[i]; mins[index] = hasNum[index] ? Math.min(mins[index], arr[i]) : arr[i]; hasNum[index] = true; } int i = 0; while (i <= len) { if (hasNum[i++]) { max = maxs[i - 1]; break; } } while (i <= len) { if (hasNum[i]) { maxGap = Math.max(maxGap, mins[i] - max); max = maxs[i]; } i++; } return maxGap; } public int bucket(long cur, long max, long min, long len) { return (int) ((cur - min) * len / (max - min)); } //測試 public static void main(String[] args) { Chapter8_26 chapter = new Chapter8_26(); int[] arr = {9, 3, 1, 10}; int res = chapter.maxGap(arr); System.out.print("數組{9, 3, 1, 10}排序以後相鄰數的最大差值: " + res); } }
####結果 數組