放暑假了,小明决定到某旅游景点游玩,他在网上搜索到了各种价位的酒店(长度为n的 数组A),他的心理价位是x元,请帮他筛选出k个最接近x元的酒店 (n>=k>0) ,并由低到高打印酒店的价格。
第一行: n,k,x
第二行: A[o] A[1] A[2]…A[n-1]
从低到高打印筛选出的酒店价格。
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;
}
10 4 6
10 9 8 7 6 5 4 3 2 1
4 5 6 7
数组长度n = 10,筛选个数 k = 4,目标价位x = 6,当4 和8 距离x 相同时,优先选择价格低的。
下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路
本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。