有乙個整形陣列a,請設計乙個複雜度為o(n)的演算法,算出排序後相鄰兩數的最大差值。
給定乙個int陣列a和a的大小n,請返回最大的差值。保證陣列元素多於1個。
測試樣例:
[1,2,5,4,6],5
返回:2
要求演算法複雜度為o(n) 一般的比較排序演算法是做不到的,這用到了桶排序的思想,思路首先尋找整個陣列的最大值和最小值求取差值,用差值除以整個陣列的長度,計算出桶之間的步長,之後建立n+1個桶,每個桶包含乙個範圍,範圍的大小為步長,之後遍歷整個陣列,將相應範圍內的數放到相應的桶中,將最大的數放到最後乙個桶中。之後尋找最大差值就是尋找桶之間元素的差值,桶內元素的差值肯定比桶間的要小,因此用後乙個桶的最小值減去前乙個桶的最大值,注意如果中間包含空桶則要跳過。遍歷一遍桶就可以尋找到最大差值。
class gap );
for(int i=0;i!=n;++i)
for(int i=0;i!=n;++i)
bool getmax(vector
&a,int &max)
return
true;
}bool getmin(vector
&a,int &min)
};
相鄰兩數最大差值
有乙個整形陣列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 解析 使用bucket排序思想,把大小為n的陣列分成 max min n個區間,顯然這個區間是1 n...
相鄰兩數最大差值
有乙個整形陣列a,請設計乙個複雜度為o n 的演算法,算出排序後相鄰兩數的最大差值。給定乙個int陣列a和a的大小n,請返回最大的差值。保證陣列元素多於1個。測試樣例 1,2,5,4,6 5返回 2 牛課上的練習題,現在把 貼出來 class gap int dis max min n 區間間隔 i...