給定乙個整形陣列arr,返回排序後的相鄰兩數的最大差值。
時間複雜度為o(n)。
如果用排序法實現,其時間複雜度為o(nlogn),而如果利用桶排序的思想(不是桶排序),可以做到o(n),額外空間複雜度為o(n)。遍歷arr找到最大值max和最小值min。如果arr的長度為n,準備n+1個桶,把max單獨放在第n+1個桶中,[min,max)範圍上的數放在1~n號桶裡,對於1~n號桶中的每乙個桶來說,負責的區間為(max-min)/n。如果乙個數為num,它應該分配進(num-min)*len/(max-min)。
arr一共有n個數,旻、一定會放進1號桶中,max一定會放進最後的桶中,所以,如果把所有的數放進n+1個桶中,必然有桶是空的。產生最大差值的相鄰數來自不同桶。所以只要計算桶之間數的間距可以,也就是只用記錄每個桶的最大值和最小值,最大差值只可能來自某個非空桶的最小值減去前乙個非空桶的最大值。
publicstatic
int maxgap(int nums)
int len = nums.length;
int min = integer.max_value;
int max = integer.min_value;
for (int i = 0; i < len; i++)
if (min == max)
boolean hasnum = newboolean[len + 1];
int maxs = newint[len + 1];
int mins = newint[len + 1];
int bid = 0;
for (int i = 0; i < len; i++)
int res = 0;
int lastmax = 0;
int i = 0;
while (i <= len)
}
for (; i <= len; i++)
}
return res;
}
//使用long型別是為了防止相乘時溢位
publicstatic
int bucket(long num, long len, long min, long max)
陣列排序後相鄰數的最大差值
題目 輸入n個數,求這n個數排序後,相鄰數的最大差值。要求時間複雜度為o n 我們可以用桶排序的思想,把n個數分到 n 1個桶中,然後我們用桶存連續長度的乙個範圍的數,每個桶負責的範圍是 maxn minn n maxn是序列中最大的數,minn是序列中最小的數 如果乙個數為num,那麼這個數應存進...
陣列相鄰兩數最大差值
思路 因為要求時間複雜度為o n 且不能用非比較排序,常用的比較排序很難做到o n 這裡是借助n 1個桶,將n個數平均分配到n個桶裡,所以我們所求的最大差值肯定不在乙個桶內 只有乙個數另說 然後依次求出當前桶最小值與前乙個非空桶最大值的差值,求出最大的差值就是我們要的結果。static class ...
陣列排序相鄰元素的最大差值
題目 給定乙個陣列,求如果排序之後,相鄰兩數的最大差值,要求時間複雜度o n 且要求不能用非基於比較的排序。解題思路 借助桶排序 created by yzm on 11 12 18.include include includeusing namespace std class maxgap in...