My Python thực hiện giải pháp ipc của:
def maximum_gap(l):
n = len(l)
if n < 2:
return 0
(x_min, x_max) = (min(l), max(l))
if x_min == x_max:
return 0
buckets = [None] * (n + 1)
bucket_size = float(x_max - x_min)/n
for x in l:
k = int((x - x_min)/bucket_size)
if buckets[k] is None:
buckets[k] = (x, x)
else:
buckets[k] = (min(x, buckets[k][0]), max(x, buckets[k][1]))
result = 0
for i in range(n):
if buckets[i + 1] is None:
buckets[i + 1] = buckets[i]
else:
result = max(result, buckets[i + 1][0] - buckets[i][1])
return result
assert maximum_gap([]) == 0
assert maximum_gap([42]) == 0
assert maximum_gap([1, 1, 1, 1]) == 0
assert maximum_gap([1, 2, 3, 4, 6, 8]) == 2
assert maximum_gap([5, 2, 20, 17, 3]) == 12
tôi sử dụng một tuple
cho các yếu tố xô của, None
nếu có sản phẩm nào. Trong phần cuối cùng, tôi loại bỏ preemptively bất kỳ thùng rỗng còn lại bằng cách gán nó cho cái trước đó (tác phẩm này, vì cái đầu tiên được đảm bảo là không trống).
Lưu ý trường hợp đặc biệt khi tất cả các phần tử đều bằng nhau.
O (n) thời gian và dung lượng bao nhiêu? – Jon
Trường hợp (n) là số lượng các phần tử trong véc tơ? Có, điều đó có thể được thực hiện với một vòng lặp khá cơ bản. –
@MatsPetersson - Nhưng anh ấy yêu cầu một vòng lặp C++ khá. –