桶排序求最大差值

2021-09-20 21:45:00 字數 1350 閱讀 3900

排序前相鄰兩數的最大差值,乙個for迴圈就能搞定

排序後相鄰兩數的最大差值,關鍵點:1.排序後 2.相鄰兩數 3.求最大差值就行,沒要求輸出排序結果

所以,可以利用桶的性質來求。

有n個資料的長度為n的陣列,為它準備n+1個桶,那麼至少有1個為空桶!(即便每個桶只裝1個數也會多餘1個桶出來)。

首先將資料最小值放入第乙個桶0,將最大值放入最後乙個桶n。其餘資料進入對應桶((當前值 - 最小值) * n / (最大值 - 最小值));

之所以要設定空桶的目的就是為了保證同乙個桶中的數,不可能存在最大差值。因為有空桶,空桶所佔的長度就超過了桶內任意2資料的長度。而第乙個桶和最後乙個桶又肯定不是空桶,所以最大差值必然不存在與同乙個桶內。但是這並不能證明空桶兩邊的資料就一定是最大差值:比如19,30,49

所以要求最大差值得在2個桶之間求。我們可以為每個桶設定3個屬性:最大值,最小值,是否有數。

用當前非空桶的最小值減去前乙個非空桶的最大值,遍歷完整個陣列求出整個陣列的最大差值。

int min = integer.max_value;//最小值初始化為乙個極大值

int max = integer.min_value;//最大值初始化為乙個極小值

for (int i = 0; i < len; i++)

if (min == max)

boolean hasnum = new boolean[len + 1];//對應每個桶是否有數

int maxs = new int[len + 1];//對應每個桶的最大值

int mins = new int[len + 1];//對應每個桶的最小值

int bid = 0;

for (int i = 0; i < len; i++)

int res = 0;

int lastmax = maxs[0];

int i = 1;

for (; i <= len; i++)

}return res;

}public static int bucket(long num, long len, long min, long max)

相鄰最大差值 桶排序

請設計乙個複雜度為o n 的演算法,計算乙個未排序陣列中排序後相鄰元素的最大差值。給定乙個整數陣列a和陣列的大小n,請返回最大差值。保證陣列元素個數大於等於2小於等於500。測試樣例 9,3,1,10 4返回 6 簡單題 使用sort進行排序,時間複雜度非o n coding utf 8 class...

無序陣列求最大差值

乙個陣列a 0.n 1 求a j a i 的最大值,其中icite 第一種方法 從左往右求下標0到 k 1 的最小值min 從右往左求 下標k到n 1 的最大值max,對於每個k都有乙個max min的值,最後求這個值的最大值即可。例如陣列 4 5 2 6 3 1 k 1 2 3 4 5 min 4...

相鄰最大差值

題目 請設計乙個複雜度為o n 的演算法,計算乙個未排序陣列中排序後相鄰元素的最大差值。給定乙個整數陣列a和陣列的大小n,請返回最大差值。designed by wyq 分析 這是乙個典型的利用桶排序求解問題,因為桶排序不少基於比較的排序可以打破nlogn的下限,可以達到題目要求的複雜度n 相鄰兩個...