給定乙個無序的陣列,找出陣列在排序之後,相鄰元素之間最大的差值。
如果陣列元素個數小於 2,則返回 0。
示例 1:說明:輸入: [3,6,9,1] 輸出: 3 解釋: 排序後的陣列是 [1,3,6,9], 其中相鄰元素 (3,6) 和 (6,9)
之間都存在最大差值 3。
示例 2:
輸入: [10] 輸出: 0 解釋: 陣列元素個數小於 2,因此返回 0。
你可以假設陣列中所有元素都是非負整數,且數值在 32 位有符號整數範圍內。
自己沒有思路,本來想用現在會的排序排出來再遍歷找最小的,但俺現在會的排序時間複雜度不太行。
//用序列22,14,13,32帶入迴圈正確
//num:22 14 13 32
//cnt 0 0 2 1 1 0 0...
//cnt 0 0 2 3 4 4 4 4 ...
//buf 22 32 13 14
class
solution
int exp =1;
vector<
int>
buf(n)
;//大小共為n的桶們
int maxval =
*max_element
(nums.
begin()
, nums.
end())
;//lsd最低位優先的基數排序
while
(maxval >= exp)
for(
int i =
1; i <
10; i++
)//直接背吧,感覺這幾行好難理解
for(
int i = n -
1; i >=
0; i--
)copy
(buf.
begin()
, buf.
end(
), nums.
begin()
);//更新這次排出來的序列到nums
exp *=10
;//往上看高一位數
}int ret =0;
for(
int i =
1; i < n; i++
)return ret;}}
;
164 最大間距
給定乙個無序的陣列,找出陣列在排序之後,相鄰元素之間最大的差值。如果陣列元素個數小於 2,則返回 0。示例 1 輸入 3,6,9,1 輸出 3 解釋 排序後的陣列是 1,3,6,9 其中相鄰元素 3,6 和 6,9 之間都存在最大差值 3。思路 注釋 public static int maximu...
164 最大間距
開始想的是計數排序,但超時,如 2,999999999 這樣的樣例,記錄陣列太長,有用的佔比太少。後看官方思路,用n 1 n為原陣列元素個數 個桶去篩元素,每個桶能放的元素大小範圍固定,即下面 中的step,處理完後再掃瞄一遍當前桶最大和後繼桶最小值的差,取最大差值為結果。至於為什麼要n 1個桶,我...
164 最大間距
題目.high 對於整數型的排序問題,首先應該聯想到桶排序,這是唯一on的排序演算法。另外假設我們把n個數放在n 1個桶裡面,必定有空桶產生,那麼最大間距肯定在間隔了空桶的兩個桶之間產生 package main import fmt type bucket struct func maximumg...