leetcode:两地调度
公司计划面试 2N 人。第 i 人飞往 A 市的费用为 costs[i][0],飞往 B 市的费用为 costs[i][1]。
返回将每个人都飞到某座城市的最低费用,要求每个城市都有 N 人抵达。
- 示例:
输入:[[10,20],[30,200],[400,50],[30,20]]
输出:110 - 解释:
第一个人去 A 市,费用为 10。
第二个人去 A 市,费用为 30。
第三个人去 B 市,费用为 50。
第四个人去 B 市,费用为 20。
最低总费用为 10 + 30 + 50 + 20 = 110,每个城市都有一半的人在面试。 - 提示:
1 <= costs.length <= 100
costs.length 为偶数
1 <= costs[i][0], costs[i][1] <= 1000
class Solution:
def twoCitySchedCost(self, costs):
costs.sort(key=lambda x:x[0]-x[1])
total = 0
n = len(costs)//2
for i in range(n):
total += costs[i][0] + costs[i+n][1]
return total
- 解题思路:
首先我们可以将所有的人全部安排的B点,那么接下来我们需要做的就是将其中n个人移动到A点就可以了,这是我们发现每移动一个人就会有 “costs[i][0]-costs[i][1]” 的误差,因此我们得出结论当这 n个移动到A的人的误差之和最小的时候则消费将会达到最低。 因此问题就好办了。我们可以将costs按照误差大小进行从小到大排序,那么前n个人去A后n个人去B就可以了
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-city-scheduling