序列重排-求相邻差和最大(京东笔试题)
2021/9/13 6:08:33
本文主要是介绍序列重排-求相邻差和最大(京东笔试题),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
题目:序列重排-求相邻差和最大
分析:数学题,分析 找规律
来源:京东笔试题(2021-9-12)
''' 题目:序列重排 给一个长度为n的序列A,你可以将序列中的元素按任意顺序重新排列,请你找到一种排列方式使得相邻两个数的差值之和最大,输出该最大值。 即若重拍后的序列是B,你需要使 |B1-B2|+|B2-B3|+···+|Bn-1-Bn|的值最大 例: 输入 输出 8 3 5 1 5 输入 输出 8 5 5 2 2 2 1 分析: 先按照升序排序!!! 例 1 2 3 4 5 1 2 3 5 3 5 4 3 5 1 2 1 2 排序后的序列B 一定 满足 高低高低的这种排列方式如上例所示 对于 1 2 5 从左边分析可以看到, 可以重写为: 5 - 1 5 - 2 1 2 被减了两遍 -1 -1 - 2 - 2 3 - 1 5 被加了两遍 +5 +5 4 - 2 3 4 在两边 各被加了一遍 +4 +4 +3 +3 -4 -3 对于 1 2 3 5 分析可知 5 - 1 5 - 2 1 被减了两遍 -1 -1 3 - 1 5 被加了两遍 +5 +5 2 3 在两边分别被减了、加了一遍 -2 -2 +3 +3 +2 -3 综上所述,可以将数组进行排序, 如果数组元素为奇数个:前边n/2个元素(low),后边n/2+1个元素(high) (sum(high)-sum(low))*2 - high[0]-high[1] (当个数是奇数时,让high中比较小的值在两边) 如果数组元素为偶数个:前边n/2个元素(low),后边n/2个元素(high) (sum(high-sum(low)))*2 - high[0] + low[-1] (当个数是偶数时,让high中比较小的值在第一个,low中比较大的值在最后一个) ''' def getMax(nums): nums.sort() mid = len(nums) // 2 low, high = nums[:mid], nums[mid:] if len(nums) % 2 != 0: return (sum(high) - sum(low)) * 2 - high[0] - high[1] else: return (sum(high) - sum(low)) * 2 - high[0] + low[-1] nums = list(map(int, input().strip().split())) print(getMax(nums))
路虽远,行则将至。事虽难,做则必成
这篇关于序列重排-求相邻差和最大(京东笔试题)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现
- 2024-05-30我们小公司,哪像华为一样,用得上IPD(集成产品开发)?