华为OD机试真题 JavaScript 实现【预定酒店】【2022Q4 100分】

在这里插入图片描述

一、题目描述

放暑假了,小明决定到某旅游景点游玩,他在网上搜索到了各种价位的酒店(长度为n的 数组A),他的心理价位是x元,请帮他筛选出k个最接近x元的酒店 (n>=k>0) ,并由低到高打印酒店的价格。

二、输入描述

第一行: n,k,x
第二行: A[o] A[1] A[2]…A[n-1]

三、输出描述

从低到高打印筛选出的酒店价格。

四、解题思路

  1. 读取输入的酒店数量 hotelCount,选择数量 selectCount,和心理价位 targetPrice;
  2. 创建一个大小为 hotelCount 的整数数组 priceArr,用于存储酒店价格;
  3. 循环读取 hotelCount 个价格,并将其存储到 priceArr 数组中;
  4. 对 priceArr 数组进行排序,以便按价格从低到高进行处理;
  5. 创建一个 ArrayList,用于存储每个酒店价格与心理价位的差值;
  6. 遍历排序后的 priceArr 数组,计算每个酒店价格与 targetPrice 的差值,并将酒店价格和差值存储到 ArrayList 中;
  7. 根据差值对 ArrayList 进行排序,如果差值相同,则按价格从低到高进行排序;
  8. 创建一个 ArrayList,用于存储筛选出的酒店价格;
  9. 遍历排序后的 ArrayList,将前 selectCount 个酒店价格加入到筛选列表中;
  10. 对筛选列表进行排序,以便按价格从低到高打印;
  11. 遍历筛选列表,按顺序打印酒店价格;

五、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 相同时,优先选择价格低的。

  1. 对酒店价格进行排序
  2. 酒店价格与心理价位差值
  3. 根据差值进行排序
  4. 筛选出的酒店价格

华为OD机试真题 JavaScript 实现【预定酒店】【2022Q4 100分】_第1张图片


下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路

本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)

每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

你可能感兴趣的:(javascript,华为od,java,华为,学习)