python数据结构与算法练习-排序
简单排序题题源
python实现
思路(参考别的博主):
转化为寻找一条直线,使集合中的元素cn={a1,a2-2,a3-5,a4-9…}距离此线距离之和最小,假设直线为l=x,则等价于求|c1−x|+|c2−x|+…+|cn−x|的最小值,则x应该取cn的中位数。那么我们构造出cn然后排下序取中间下标。(这里不管n是奇是偶 下标都是用 index = len(li)//2 取得 ,这里我困惑了很久暂时不知道该如何解答。
def find_medium(n,li):
gap = 2
for i in range(1,n):
li[i] = li[i] - gap
i += 1
gap = gap + i + 1
l = sorted(li)#排序也不可少
s = sum([abs(l[i]-l[n//2 ]) for i in range(n)])
#注意此处的中位数下标的取法
return s
n = int(input())
li = list(map(int,input().split()))
print(find_medium(n,li))
需要注意的知识点:
此类题需要反复看,不然过不了多久又要忘了。
仅记录刷题过程以及需要注意的知识点,方便自己复习。