相鄰兩數最大差值

2021-07-25 07:01:58 字數 970 閱讀 7007

有乙個整形陣列a,請設計乙個複雜度為o(n)的演算法,算出排序後相鄰兩數的最大差值。

給定乙個int陣列a和a的大小n,請返回最大的差值。保證陣列元素多於1個。

測試樣例:

[1,2,5,4,6],5
返回:2

解析:使用bucket排序思想,把大小為n的陣列分成(max-min)/n個區間,顯然這個區間是1 ~ n。

對映函式如下:

((num - min) * n / (max - min));

這樣寫是因為(num-min) / ((max-min) / n) =  ((num - min) * n / (max - min));

比如num=6,min=1,max=6,(6-1) * 5 / (6-1) = 5,所以6在5號桶。這個對映函式決定了桶序號不可能為0,所以程式設計時要先剔除為0的空桶。

由於在任何乙個桶中任何兩個數的差值都不可能大於區間差值,而在空桶左右兩邊不空的桶裡,相鄰數的差值肯定大於區間值。所以產生最大差值的兩個相鄰數肯定來自不同的桶。所以只要計算桶之間數的間距就可以,也就是只用記錄每個桶的最大值和最小值,最大差值可能來自某個非空桶的最小值減去前乙個非空桶的最大值。

**如下:

class gap 

if(max == min)

return res;

vectorhas_num(n+1, false); //用來標記是否是非空桶

vectormaxs(n+1, 0);

vectormins(n+1, 0);

for(int i=0; i整段程式的核心就是:

while(++k <= n)

}

這一段程式通過++k保證了在之前k的基礎上加1,has_num[k]保證只有非空桶進入該條件,所以相鄰兩個非空桶就會進入,並計算res。我們要注意更新last_max。

相鄰兩數最大差值

有乙個整形陣列a,請設計乙個複雜度為o n 的演算法,算出排序後相鄰兩數的最大差值。給定乙個int陣列a和a的大小n,請返回最大的差值。保證陣列元素多於1個。測試樣例 1,2,5,4,6 5返回 2 基於桶排序的思想完成,不考慮兩個相同的桶內的差值,只考慮該桶的最小值減去上乙個桶的最大值,最大的就是...

相鄰兩數最大差值

有乙個整形陣列a,請設計乙個複雜度為o n 的演算法,算出排序後相鄰兩數的最大差值。給定乙個int陣列a和a的大小n,請返回最大的差值。保證陣列元素多於1個。測試樣例 1,2,5,4,6 5 返回 2 要求演算法複雜度為o n 一般的比較排序演算法是做不到的,這用到了桶排序的思想,思路首先尋找整個陣...

相鄰兩數最大差值

有乙個整形陣列a,請設計乙個複雜度為o n 的演算法,算出排序後相鄰兩數的最大差值。給定乙個int陣列a和a的大小n,請返回最大的差值。保證陣列元素多於1個。測試樣例 1,2,5,4,6 5返回 2 牛課上的練習題,現在把 貼出來 class gap int dis max min n 區間間隔 i...