嗨,我已經用這個解決方案解決了陣列問題中的最小絕對差:
min_diff = 99999999
difference = 0
for i in range(len(arr)):
for y in range(len(arr)):
if i != y:
defference = abs(arr[i] - arr[y])
if defference < min_diff:
min_diff = defference
return min_diff
所以你可以看到我的解決方案是 O(n2) 并且它給出了一個超出時間限制的錯誤,所以我復制了另一個解決方案,它是這樣的:
arr = sorted(arr)
# Initialize difference as infinite
diff = 10**20
# Find the min diff by comparing adjacent
# pairs in sorted array
for i in range(n-1):
if arr[i 1] - arr[i] < diff:
diff = arr[i 1] - arr[i]
# Return min diff
return diff
如您所見,它與我的具有時間復雜度的代碼相同,所以為什么這個好東西可以正常作業,我沒有收到超出時間限制的錯誤。請告訴我我的代碼和我復制的代碼有什么區別。
uj5u.com熱心網友回復:
考慮O(n)估計的一種簡單方法是計算您有多少嵌套回圈。您的代碼有兩個回圈,因此它是“二次的”,并且對于 100 個元素需要 100^2 = 10,000 個回圈。他們有一個回圈(“線性”),100 個元素需要大約 100 個回圈。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/483022.html
