公司面试人员城市分配 | 豆包MarsCode AI刷题

60 阅读3分钟

问题描述

公司计划面试 2n 人,并需要将每个人分配到两个城市中的一个。每个人飞往城市 A 或城市 B 的费用不同,具体体现在数组 costs 中,其中 costs[i] = [aCosti, bCosti] 代表第 i 个人飞往城市 A 和城市 B 的费用。你需要帮助公司计算将 2n 个人分配到两个城市的最低费用,要求每个城市都有 n 个人到达。

问题理解

我们需要将2n个人分配到两个城市A和B,每个城市n个人。每个人的费用不同,我们需要找到一种分配方式,使得总费用最小。

数据结构选择

我们可以使用一个数组来存储每个人的费用,其中costs[i] = [aCosti, bCosti]表示第i个人飞往城市A和城市B的费用。

算法步骤

  1. 计算差值:对于每个人,计算飞往城市A和城市B的费用差值,即diff = aCosti - bCosti。这个差值表示如果这个人从城市A飞往城市B,费用会增加多少。
  2. 排序:根据差值对所有人进行排序。差值越小的人,越应该优先考虑飞往城市A,因为这样费用增加的最少。
  3. 分配:从前n个人中选择飞往城市A,从后n个人中选择飞往城市B。

具体步骤

  1. 计算每个人的费用差值。
  2. 根据差值对所有人进行排序。
  3. 选择前n个人飞往城市A,后n个人飞往城市B。
  4. 计算总费用并返回。

通过这种方式,我们可以确保总费用最小化。

如何计算每个人飞往两个城市的费用差

你可以通过遍历costs数组,计算每个人飞往城市A和城市B的费用差值。具体来说,对于每个costs[i],你可以计算aCosti - bCosti,这个差值表示如果这个人从城市A飞往城市B,费用会增加多少。

代码提示

你可以在solution函数中添加一个循环来计算每个人的费用差值,并将这些差值存储在一个新的数组中。

1732976209336.png

解释

  1. 计算差值:对于每个cost,计算aCost - bCost,并将结果存储在differences数组中。
  2. 存储差值和原始费用:为了后续的排序和计算,我们将差值和原始费用一起存储在differences数组中。

代码提示

  1. 排序:根据差值对differences数组进行排序。
  2. 分配:选择前n个人飞往城市A,后n个人飞往城市B。
  3. 计算总费用:根据分配结果计算总费用。

1732976455897.png 1732976553290.png

总结

  1. 计算差值:我们已经计算了每个人的费用差值,并将其存储在differences数组中。

  2. 排序:使用sort()方法对differences数组进行排序,默认是按差值从小到大排序。

  3. 分配

    • 前n个人飞往城市A,累加他们的aCosttotal_cost
    • 后n个人飞往城市B,累加他们的bCosttotal_cost
  4. 返回总费用:最后返回total_cost