华为OD机试真题 JavaScript 实现【服务中心选址】【2023Q1 100分 】-LMLPHP

一、题目描述

一个快递公司希望在一条街道建立新的服务中心。公司统计了该街道中所有区域在地图上的位置,并希望能够以此为依据为新的服务中心选址,使服务中心到所有区域的距离的总和最小。

给你一个数组 positions,其中 positions[i] = [left, right] 表示第 i 区域在街道上的位置,其中left 代表区域的左侧的起点,right 代表区域的右侧终点。

假设服务中心的位置为 location:

  • 如果第 i 个区域的右侧终点 right 满足 right< location,则第 i 个区域到服务中心的距离为location - right;
  • 如果第 i 个区域的左侧起点 left 满足 left> location,则第 i 个区域到服务中心的距离为 left -location;
  • 如果第 i 个区域的两侧 left,right 满足 left <= location <= right,则第 i 个区域到服务中心的距离为 0;

选择最佳的服务中心位置为 location,请返回最佳的服务中心位置到所有区域的距离总和的最小值;

二、输入描述

第一行,一个整数 N 表示区域个数;
后面 N 行,每行两个整数,表示区域的左右起点终点;

三、输出描述

运行结果输出一个整数,表示服务中心位置到所有区域的距离总和的最小值。

四、解题思路

  1. 首先读取输入的区域个数 N 和每个区域的左右起点终点;
  2. 创建一个二维数组 arr,用于存储每个区域的左右起点终点;
  3. 将每个区域的左右起点终点添加到一个临时列表 tmp 中;
  4. 对临时列表 tmp 进行排序,得到最小值和最大值;
  5. 初始化一个变量 ans,用于记录最小的距离总和,初始值设为最大值;
  6. 从最小值到最大值遍历所有可能的服务中心位置,步长为0.5;
  7. 对于每个服务中心位置 i,计算其到所有区域的距离总和 dis:
    • 遍历每个区域的左右起点终点,判断服务中心位置与区域的相对位置关系;
    • 如果区域的右侧终点小于服务中心位置 i,则距离为 i - r;
    • 如果区域的左侧起点大于服务中心位置 i,则距离为 l - i;
    • 如果服务中心位置在区域的范围内,则距离为 0;
    • 将每个区域的距离累加到 dis 中;
  8. 更新最小的距离总和 ans,取当前计算得到的距离总和 dis 和 ans 中的较小值;
  9. 返回最小的距离总和 ans;

五、JavaScript算法源码

function getDistanceSum(n, arr) {
    const tmp = [];
    for (let i = 0; i < n; i++) {
        tmp.push(arr[i][0]);
        tmp.push(arr[i][1]);
    }
    tmp.sort((a, b) => a - b);
    const min = tmp[0];
    const max = tmp[tmp.length - 1];
    let ans = Infinity;
    for (let i = min; i <= max; i += 0.5) {
        let dis = 0;
        for (let j = 0; j < n; j++) {
            const l = arr[j][0];
            const r = arr[j][1];
            if (r < i) dis += i - r;
            else if (i < l) dis += l - i;
        }
        ans = Math.min(ans, dis);
    }
    return ans;
}

六、效果展示

1、输入

3
10 20
30 40
50 60

2、输出

30

华为OD机试真题 JavaScript 实现【服务中心选址】【2023Q1 100分 】-LMLPHP


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

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

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

华为OD机试真题 JavaScript 实现【服务中心选址】【2023Q1 100分 】-LMLPHP

06-13 06:04