题目来源:牛客,阿里巴巴编程题(2星),第6题
题目描述
题解
思路比较简单,将n个member按从小到大的顺序排列,分成small和big两部分【若n为奇数,则small的长度比big多1】,再将big逆序,穿插合并small和big即可。
代码:
import math
def main():
n = int(input())
member = [int(i) for i in input().split()]
member.sort()
small = member[:int(n/2)+1] if n%2 else member[:int(n/2)]
big = member[int(n/2)+1:] if n%2 else member[int(n/2):]
member = [small.pop(0),big.pop()]
ans = member[1]-member[0]
while len(member)<n:
if len(small)>0:
member.append(small.pop(0))
ans+= abs(member[-1]-member[-2])
if len(big)>0:
member.append(big.pop())
ans += abs(member[-1]-member[-2])
ans += abs(member[-1]-member[0])
print(ans)
for i in member:
print(i,end=' ')
return
if __name__ == '__main__':
main()