问题描述
公司计划面试 2n 人,并需要将每个人分配到两个城市中的一个。每个人飞往城市 A 或城市 B 的费用不同,具体体现在数组 costs 中,其中 costs[i] = [aCosti, bCosti] 代表第 i 个人飞往城市 A 和城市 B 的费用。你需要帮助公司计算将 2n 个人分配到两个城市的最低费用,要求每个城市都有 n 个人到达。
问题理解
我们需要将2n个人分配到两个城市A和B,每个城市n个人。每个人的费用不同,我们需要找到一种分配方式,使得总费用最小。
数据结构选择
我们可以使用一个数组来存储每个人的费用,其中costs[i] = [aCosti, bCosti]表示第i个人飞往城市A和城市B的费用。
算法步骤
- 计算差值:对于每个人,计算飞往城市A和城市B的费用差值,即
diff = aCosti - bCosti。这个差值表示如果这个人从城市A飞往城市B,费用会增加多少。 - 排序:根据差值对所有人进行排序。差值越小的人,越应该优先考虑飞往城市A,因为这样费用增加的最少。
- 分配:从前n个人中选择飞往城市A,从后n个人中选择飞往城市B。
具体步骤
- 计算每个人的费用差值。
- 根据差值对所有人进行排序。
- 选择前n个人飞往城市A,后n个人飞往城市B。
- 计算总费用并返回。
通过这种方式,我们可以确保总费用最小化。
如何计算每个人飞往两个城市的费用差
你可以通过遍历costs数组,计算每个人飞往城市A和城市B的费用差值。具体来说,对于每个costs[i],你可以计算aCosti - bCosti,这个差值表示如果这个人从城市A飞往城市B,费用会增加多少。
代码提示
你可以在solution函数中添加一个循环来计算每个人的费用差值,并将这些差值存储在一个新的数组中。
解释
- 计算差值:对于每个
cost,计算aCost - bCost,并将结果存储在differences数组中。 - 存储差值和原始费用:为了后续的排序和计算,我们将差值和原始费用一起存储在
differences数组中。
代码提示
- 排序:根据差值对
differences数组进行排序。 - 分配:选择前n个人飞往城市A,后n个人飞往城市B。
- 计算总费用:根据分配结果计算总费用。
总结
-
计算差值:我们已经计算了每个人的费用差值,并将其存储在
differences数组中。 -
排序:使用
sort()方法对differences数组进行排序,默认是按差值从小到大排序。 -
分配:
- 前n个人飞往城市A,累加他们的
aCost到total_cost。 - 后n个人飞往城市B,累加他们的
bCost到total_cost。
- 前n个人飞往城市A,累加他们的
-
返回总费用:最后返回
total_cost。