永州企业网站建设,教育类app开发价格表,兰州seo外包公司,海口网站建设工作一、题目描述
一个快递公司希望在一条街道建立新的服务中心。公司统计了该街道中所有区域在地图上的位置#xff0c;并希望能够以此为依据为新的服务中心选址#xff0c;使服务中心到所有区域的距离的总和最小。
给你一个数组 positions#xff0c;其中 positions[i] [le…
一、题目描述
一个快递公司希望在一条街道建立新的服务中心。公司统计了该街道中所有区域在地图上的位置并希望能够以此为依据为新的服务中心选址使服务中心到所有区域的距离的总和最小。
给你一个数组 positions其中 positions[i] [left, right] 表示第 i 区域在街道上的位置其中left 代表区域的左侧的起点right 代表区域的右侧终点。
假设服务中心的位置为 location
如果第 i 个区域的右侧终点 right 满足 right location则第 i 个区域到服务中心的距离为location - right如果第 i 个区域的左侧起点 left 满足 left location则第 i 个区域到服务中心的距离为 left -location如果第 i 个区域的两侧 leftright 满足 left location right则第 i 个区域到服务中心的距离为 0
选择最佳的服务中心位置为 location请返回最佳的服务中心位置到所有区域的距离总和的最小值
二、输入描述
第一行一个整数 N 表示区域个数 后面 N 行每行两个整数表示区域的左右起点终点
三、输出描述
运行结果输出一个整数表示服务中心位置到所有区域的距离总和的最小值。
四、解题思路
首先读取输入的区域个数 N 和每个区域的左右起点终点创建一个二维数组 arr用于存储每个区域的左右起点终点将每个区域的左右起点终点添加到一个临时列表 tmp 中对临时列表 tmp 进行排序得到最小值和最大值初始化一个变量 ans用于记录最小的距离总和初始值设为最大值从最小值到最大值遍历所有可能的服务中心位置步长为0.5对于每个服务中心位置 i计算其到所有区域的距离总和 dis 遍历每个区域的左右起点终点判断服务中心位置与区域的相对位置关系如果区域的右侧终点小于服务中心位置 i则距离为 i - r如果区域的左侧起点大于服务中心位置 i则距离为 l - i如果服务中心位置在区域的范围内则距离为 0将每个区域的距离累加到 dis 中 更新最小的距离总和 ans取当前计算得到的距离总和 dis 和 ans 中的较小值返回最小的距离总和 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 实现【相对开音节】【2022Q4 100分】附详细解题思路
本文收录于华为OD机试JavaScript真题A卷B卷
每一题都有详细的答题思路、详细的代码注释、样例测试订阅后专栏内的文章都可看可加入华为OD刷题群私信即可发现新题目随时更新全天CSDN在线答疑。