目录
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、JavaScript算法源码
- 六、效果展示
- 1、输入
- 2、输出
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
小明今年升学到了小学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的字符串表示,注意去除末尾多余的空格;
五、JavaScript算法源码
function sortChildren(heights, h) {
heights.sort((a, b) => {
const diff1 = Math.abs(a - h);
const diff2 = Math.abs(b - h);
if (diff1 === diff2) {
return a - b;
} else {
return diff1 - diff2;
}
});
return heights;
}
六、效果展示
1、输入
50 8
46 47 48 49 50 51 52 53
2、输出
50 49 51 48 52 47 53 46
🏆下一篇:华为OD机试真题 JavaScript 实现【贪心的商人】【2023Q1 100分】
🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。