一、题目描述
放暑假了,小明决定到某旅游景点游玩,他在网上搜索到了各种价位的酒店(长度为n的 数组A),他的心理价位是x元,请帮他筛选出k个最接近x元的酒店 (n>=k>0) ,并由低到高打印酒店的价格。
二、输入描述
第一行: n,k,x
第二行: A[o] A[1] A[2]…A[n-1]
三、输出描述
从低到高打印筛选出的酒店价格。
四、解题思路
- 读取输入的酒店数量 hotelCount,选择数量 selectCount,和心理价位 targetPrice;
- 创建一个大小为 hotelCount 的整数数组 priceArr,用于存储酒店价格;
- 循环读取 hotelCount 个价格,并将其存储到 priceArr 数组中;
- 对 priceArr 数组进行排序,以便按价格从低到高进行处理;
- 创建一个 ArrayList,用于存储每个酒店价格与心理价位的差值;
- 遍历排序后的 priceArr 数组,计算每个酒店价格与 targetPrice 的差值,并将酒店价格和差值存储到 ArrayList 中;
- 根据差值对 ArrayList 进行排序,如果差值相同,则按价格从低到高进行排序;
- 创建一个 ArrayList,用于存储筛选出的酒店价格;
- 遍历排序后的 ArrayList,将前 selectCount 个酒店价格加入到筛选列表中;
- 对筛选列表进行排序,以便按价格从低到高打印;
- 遍历筛选列表,按顺序打印酒店价格;
五、JavaScript算法源码
function selectHotels(hotelCount, selectCount, targetPrice, input) {
const prices = input.split(" ");
// 对酒店价格进行排序
const sortedPrices = prices.sort((a, b) => a - b);
// 酒店价格与心理价位差值
const priceDiff = sortedPrices.map((price) => [price, Math.abs(price - targetPrice)]);
// 根据差值进行排序
priceDiff.sort((a, b) => {
if (a[1] === b[1]) {
return a[0] - b[0];
} else {
return a[1] - b[1];
}
});
// 筛选出的酒店价格
const selectedHotels = priceDiff.slice(0, selectCount).map((item) => item[0]);
// 按照从低到高的顺序打印酒店价格
selectedHotels.sort((a, b) => a - b);
return selectedHotels;
}
六、效果展示
1、输入
10 4 6
10 9 8 7 6 5 4 3 2 1
2、输出
4 5 6 7
3、思路
数组长度n = 10,筛选个数 k = 4,目标价位x = 6,当4 和8 距离x 相同时,优先选择价格低的。
- 对酒店价格进行排序
- 酒店价格与心理价位差值
- 根据差值进行排序
- 筛选出的酒店价格
🏆下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路
🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。