目录
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、Python算法源码
- 六、效果展示
- 1、输入
- 2、输出
一、题目描述
小明今年升学到了小学1年级,来到新班级后,发现其他小朋友身高参差不齐,然后就想基于每个小朋友和自己的身高差,对他们进行排序,请帮他实现排序。
二、输入描述
第一行为正整数h和n。
0 < h < 200为小明的身高、0 < n < 50为新班级其他小朋友个数;
第二行为n个正整数,h1~hn分别是其他小朋友的身高,取值范围0 < hi < 200,且n个正整数各不相同。
三、输出描述
输出排序结果,各正整数以空格分割,和小明身高差绝对值最小的小朋友排在前面,和小明身高差绝对值最大的小朋友排在后面,如果两个小朋友和小明身高一样,则个子较小的小朋友排在前面。
四、解题思路
- 读取输入的小明身高h和其他小朋友的个数n;
- 创建一个ArrayList用于存储其他小朋友的身高;
- 读取输入的n个正整数,将其添加到ArrayList中;
- 使用Comparator对ArrayList进行排序,排序规则如下:
- 首先按照和小明身高差的绝对值进行排序,差值越小的排在前面;
- 如果差值相同,则按照身高进行排序,身高较小的排在前面;
- 构建一个StringBuilder用于存储排序结果;
- 遍历排序后的ArrayList,将每个身高添加到StringBuilder中,并在后面添加一个空格;
- 输出StringBuilder的字符串表示,注意去除末尾多余的空格;
五、Python算法源码
def sort_children(heights, h):
# 对身高差和身高进行排序
heights.sort(key=lambda x: (abs(x - h), x))
return heights
六、效果展示
1、输入
50 8
46 47 48 49 50 51 52 53
2、输出
50 49 51 48 52 47 53 46
🏆下一篇:华为OD机试真题 Python 实现【相对开音节】【2022Q4 100分】,附详细解题思路
🏆本文收录于,华为OD机试(Python)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。