相鄰最大差值 桶排序

2021-07-26 20:38:34 字數 1465 閱讀 3295

請設計乙個複雜度為o(n)的演算法,計算乙個未排序陣列中排序後相鄰元素的最大差值。

給定乙個整數陣列a和陣列的大小n,請返回最大差值。保證陣列元素個數大於等於2小於等於500。

測試樣例:

[9,3,1,10],4
返回:6

簡單題

使用sort進行排序,時間複雜度非o(n)

# -*- coding:utf-8 -*-

class maxdivision:

def findmaxdivision(self, a, n):

# write code her

a.sort()

maxx = -0x3f3f3f3f

for i in range(1, n):

if abs(a[i - 1] - a[i]) > maxx:

maxx = abs(a[i - 1] - a[i])

return maxx

if __name__ == "__main__":

a = maxdivision()

print a.findmaxdivision([9,3,1,10],4)

使用桶排序,時間複雜度為o(n)

桶排序的實現步驟:

1.找出最大值和最小值。

2.生成乙個最大值-最小值的區間 比如最大值9,最小值3,那就需要7個桶

3.往裡面填

4.查詢空桶,最多的即為最大差值。

# -*- coding:utf-8 -*-

class maxdivision:

def findmaxdivision(self, a, n):

# write code her

minn = min(a)

maxx = max(a)

# 生成桶

res = [0 for i in range(maxx - minn + 1)]

# 填桶

for i in range(n):

res[a[i] - minn] += 1

count = 0

num = -0x3f3f3f3f

for i in range(len(res)):

if res[i] == 0:

# 如果說當前的桶為空,則記錄下來連續的空桶數

count += 1

else:

if num < count:

num = count

count = 0

# 為何加1?舉例如下:最大值為9,最小值為3,中間有5個空桶,但差值應為6

return num + 1

if __name__ == "__main__":

a = maxdivision()

print a.findmaxdivision([9,3,1,10],4)

相鄰最大差值

題目 請設計乙個複雜度為o n 的演算法,計算乙個未排序陣列中排序後相鄰元素的最大差值。給定乙個整數陣列a和陣列的大小n,請返回最大差值。designed by wyq 分析 這是乙個典型的利用桶排序求解問題,因為桶排序不少基於比較的排序可以打破nlogn的下限,可以達到題目要求的複雜度n 相鄰兩個...

桶排序求最大差值

排序前相鄰兩數的最大差值,乙個for迴圈就能搞定 排序後相鄰兩數的最大差值,關鍵點 1.排序後 2.相鄰兩數 3.求最大差值就行,沒要求輸出排序結果 所以,可以利用桶的性質來求。有n個資料的長度為n的陣列,為它準備n 1個桶,那麼至少有1個為空桶!即便每個桶只裝1個數也會多餘1個桶出來 首先將資料最...

陣列排序相鄰元素的最大差值

題目 給定乙個陣列,求如果排序之後,相鄰兩數的最大差值,要求時間複雜度o n 且要求不能用非基於比較的排序。解題思路 借助桶排序 created by yzm on 11 12 18.include include includeusing namespace std class maxgap in...