請設計乙個複雜度為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...