給定乙個陣列,求如果排序之後,相鄰兩數的最大差值,要求時間複雜度o(n),且要求不能用非基於比較的排序。
思路:這種問題的就是要用到桶排序。先建立乙個n+1的桶,再把陣列中的數給放進去,這樣就會保證有乙個桶是空的,所以最大差值必然是不可能在桶內產生的。一定是中間有乙個空桶或者兩個相鄰桶來產生的。
package lianxi02;
public
class
code07_maxgap
;int max=
maxgap
(arr)
; system.out.
println
(max);}
public
static
intmaxgap
(int
arr)
if(max==min)
return0;
boolean
hasnum=
newboolean
[len+1]
;int
maxs=
newint
[len+1]
;int
mins=
newint
[len+1]
;int bit;
for(
int i=
0;i)int lastmax=maxs[0]
;int res=0;
for(
int i=
1;i<=len;i++
)//找最大的差值的時候,最大的差值一定不會再相同的桶**現,只會在相鄰的桶出現,因此我們可以用後乙個桶的最小值減去上乙個桶的最大值來進行判斷。
}return res;
}public
static
intbucket
(int arr,
int len,
int min,
int max)
}
有關桶排序的小運用
question 無序陣列進行排序後,求相鄰倆數間最大差值,要求時間複雜度o n 非比較性?thinking sketch n 個數,n 1個桶,必有乙個空桶。在每個非空桶裡紀錄桶裡最大值和最小值,並用 bool 型別記錄是否為空桶,而最大差值產生於相鄰倆個非空桶之間。detailed 先將無序陣列...
排序 桶排序
首先,桶排序是一種簡單並且執行快的一種排序。第一步,對五個數進行排序。程式如下 include using namespace std int main 首先對陣列進行歸零 for int j 1 j 5 j 將輸入的數的個數存入陣列中。for int k 1 k 10 k 執行原理 桶排序,就是先...
桶排序的應用
題目 在乙個無序陣列中,求取有序之後相鄰數差值最大的在乙個無序陣列中,求取有序之後相鄰數差值最大的 要求 時間複雜度為o n 且存在資料範圍特別大 即不允許使用桶排序 解法 只是借鑑了桶的概念,而並沒有使用桶排序來求取。這一次是取決於給定的陣列中的元素個數,過程如下 1 陣列的大小是n,需要準備n ...