Skip to content

Instantly share code, notes, and snippets.

@binux
Created March 28, 2018 08:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save binux/1891d88a3a7e47775f490fc1e32b8fa7 to your computer and use it in GitHub Desktop.
Save binux/1891d88a3a7e47775f490fc1e32b8fa7 to your computer and use it in GitHub Desktop.
import bisect
def insertSort(l, n):
i = bisect.bisect_left(l, n)
l.insert(i, n)
return l
def f(l, minimum=1):
if len(l) == 0:
return 0
if len(l) == 1:
m = max(l[0], minimum)
return abs(m - l[0])
medians = []
sorted_l = []
for i in l[::-1]:
sorted_l = insertSort(sorted_l, i)
medians.append(sorted_l[int((len(sorted_l)-1)/2)])
medians_min = min(medians)
index = len(l) - medians.index(medians_min) - 1
m = max(minimum, medians_min)
return f(l[:index], m) + sum(abs(x - m) for x in l[index:])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment