164 最大間距

2021-09-25 06:01:48 字數 1155 閱讀 9653

開始想的是計數排序,但超時,如[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 解釋 陣列元素個數...