開始想的是計數排序,但超時,如[2,999999999]這樣的樣例,記錄陣列太長,有用的佔比太少。後看官方思路,用n+1(n為原陣列元素個數)個桶去篩元素,每個桶能放的元素大小範圍固定,即下面**中的step,處理完後再掃瞄一遍當前桶最大和後繼桶最小值的差,取最大差值為結果。至於為什麼要n+1個桶,我是為了方便計算,我是用(原陣列各元素-min)/step的結果直接作為它的桶號,但桶數也不能小於n-1,形象點說就是n個數每兩個數中間乙個桶,這樣n-1個桶正好,再少的話可能最大相鄰元素差值就出現在乙個桶中里。舉個例子:[1,2,2.5,3],n=4,若取n-2=2個桶,1,2在第乙個桶,2.5,3在第二個桶,最大差值出現在1,2間,但它們是乙個桶裡的,不符合我們演算法的要求。
class solution:
def maximumgap(self, nums):
_len=len(nums)
if _len<2:
return 0
_min,_max=nums[0],nums[0]
for x in nums:
if _min>x:
_min=x
if _max_max=x
if _max-_min<=1:
return _max-_min
step=(_max-_min)/_len
temp=[[0 for i in range(3)] for j in range(_len+1)]
for x in nums:
i=int((x-_min)//step)
#i為當前元素應放置的桶號
if temp[i][2]==0:
temp[i][2]=1
temp[i][0],temp[i][1]=x,x
else:
temp[i][0]=min(temp[i][0],x)
temp[i][1]=max(temp[i][1],x)
i=-1
res=0
for j in range(len(temp)):
if temp[j][2] and i==-1:
i=jelif temp[j][2] and i!=-1:
res=max(res,temp[j][0]-temp[i][1])
i=jreturn res
164 最大間距
給定乙個無序的陣列,找出陣列在排序之後,相鄰元素之間最大的差值。如果陣列元素個數小於 2,則返回 0。示例 1 輸入 3,6,9,1 輸出 3 解釋 排序後的陣列是 1,3,6,9 其中相鄰元素 3,6 和 6,9 之間都存在最大差值 3。思路 注釋 public static int maximu...
164 最大間距
題目.high 對於整數型的排序問題,首先應該聯想到桶排序,這是唯一on的排序演算法。另外假設我們把n個數放在n 1個桶裡面,必定有空桶產生,那麼最大間距肯定在間隔了空桶的兩個桶之間產生 package main import fmt type bucket struct func maximumg...
164 最大間距
題目描述 給定乙個無序的陣列,找出陣列在排序之後,相鄰元素之間最大的差值。如果陣列元素個數小於 2,則返回 0。示例 1 輸入 3,6,9,1 輸出 3 解釋 排序後的陣列是 1,3,6,9 其中相鄰元素 3,6 和 6,9 之間都存在最大差值 3。示例 2 輸入 10 輸出 0 解釋 陣列元素個數...