华为OD机试真题 JavaScript 实现【租车骑绿道】【2023Q1 100分】

一、题目描述

部门组织绿岛骑行团建活动,租用公共双人自行车骑行,每辆自行车最多坐两人、最大载重 M。

给出部门每个人的体重,请问最多需要租用多少双人自行车。

二、输入描述

第一行两个数字 m、n,自行车限重 m,代表部门总人数 n。

第二行,n 个数字,代表每个人的体重。体重都小于等于自行车限重 m。

0

0 < n <= 1000000

三、输出描述

最小需要的双人自行车数量。

四、解题思路

1、输入

7 6
3 4 5 3 3 7

2、输出

4

3、说明

  1. 自行车限重7
  2. 一共6人,按照体重排序,3 3 3 4 5 7
  3. 分配自行车,3 + 3 < 7,3 + 4 = 7,5 < 7,7 =7
  4. 故,一共4台。

4、双指针算法

  1. 先排序;
  2. 如果两人体重之和小于等于 m,则租一辆双人自行车;
  3. 如果两人体重之和大于 m,则租一辆单人自行车;

五、JavaScript算法源码

function calculate(weightLimit, weights) {
    const n = weights.length;
    let count = 0;
    let i = 0;
    let j = n - 1;

    weights.sort((a, b) => a - b);

    /**
     * 如果两人体重之和小于等于 m,则租一辆双人自行车。
     * 如果两人体重之和大于 m,则租一辆单人自行车。
     */
    while (i < j) {
        // 如果两个重量加起来大于m,那么右指针左移
        if (weights[i] + weights[j] > weightLimit) {
            j--;
            count++;
        } else {
            i++;
            j--;
            count++;
        }
    }

    // 左右指针相等时
    if (i === j) {
        count++;
    }

    return count;
}

六、效果展示

华为OD机试真题 JavaScript 实现【租车骑绿道】【2023Q1 100分】_第1张图片


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

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

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

在这里插入图片描述

你可能感兴趣的:(搬砖工逆袭Java架构师,华为od,javascript,华为,算法)