आईपीसी के समाधान के मेरे अजगर कार्यान्वयन:
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
मैं बाल्टी के तत्वों के लिए एक tuple
उपयोग करते हैं, None
अगर खाली। आखिरी हिस्से में, मैं इसे पिछले एक को असाइन करके किसी भी शेष खाली बाल्टी को पूर्ववत कर देता हूं (यह काम करता है, क्योंकि पहले व्यक्ति को खाली होने की गारंटी है)।
विशेष मामले नोट करें जब सभी तत्व बराबर हैं।
ओ (एन) समय और कितनी जगह? – Jon
कहां (एन) वेक्टर में तत्वों की संख्या है? हां, यह एक सुंदर मूल पाश के साथ किया जा सकता है। –
@ मैट्स पीटरसन - लेकिन उन्होंने एक सुंदर सी ++ पाश के लिए कहा। –