演算法 亂序陣列排序後的元素最大間距值

2022-07-03 11:27:11 字數 1103 閱讀 1076

給定乙個無序的陣列,找出陣列在排序之後,相鄰元素之間最大的差值。

如果陣列元素個數小於 2,則返回 0。

leetcode

首先建立桶,每個桶中只需要存放這個桶中元素的最大值和最小值。

桶尺寸就是陣列中元素範圍再除以陣列的大小,桶的數量就是陣列範圍除以桶的尺寸再加一。

為什麼需要這樣規定桶的尺寸呢?因為這樣可以讓最大的間距的兩個元素在兩個不同的桶中。可以證明一下,因為我們用元素範圍之差除以元素個數,所以桶的尺寸就是平均的元素間距,顯然最大間距最大的元素不可能在同乙個桶。

為什麼要最大間距的元素在兩個不同的桶中呢?如果兩個元素在桶中,那就又需要再桶中進行排序求解了,這樣桶排序的優勢就沒了。

遍歷陣列,把元素放到桶中。這裡只需要乙個桶中元素的最大值和最小值,因為答案不會在乙個桶中,所以,只需要比較相鄰桶的邊界就能獲取答案,其餘的值只會礙事。

遍歷桶,用當前桶的最小值減去上乙個桶的最大值,就是可能的答案。

class

bucket

class

solution

// 計算桶的大小和數量

int size = math.

max(1,

(maxn - minn)

/(n -1)

);int bucketnum =

(maxn - minn)

/ size +1;

list

buckets =

newarraylist

<

>()

;for

(int i =

0; i < bucketnum; i++

) buckets.

add(

newbucket()

);// 把元素放到桶裡,只取桶中的最大值和最小值

for(

int num : nums)

int pre = minn, res =0;

// 遍歷桶,獲取最大間距

for(bucket b : buckets)

return res;

}}

亂序陣列的演算法

在做開發的時候,遇到了乙個問題,比如說我想要乙個陣列,比如說空間大小為10,裡面的數是1 10,不能重複。比如 8,9,2,4,5,7,1,3,6,10.順序都是亂的,且是1 10,當時想了一會,感覺有點難實現,後來想了幾分鐘,居然實現了,後來再想的時候,突然不回了,怎麼也想不出來了,後來看自己的 ...

無序陣列排序後的最大相鄰差

無序陣列排序後的最大相鄰差 public class maxdis int d max min 1.如果 max和min相等則說明陣列中所有元素都相等則,返回0 if d 0 2.初始化桶 int bucketnum array.length bucket buckets newbucket buc...

實現只有0,1,2三種元素的亂序陣列的排序

第一眼看到這樣的題目,會舉得非常簡單,只需要兩次遍歷陣列就可以完成了。第一次遍歷,掃瞄陣列中的元素,每次遇到0則count0 遇到1則count1 遇到2則count2 這樣一趟下來就能夠統計出陣列中0,1,2的個數了。然後第二次遍歷的時候,只需要對陣列進行重新賦值就可以了,從頭開始賦值count0...