【力扣】1029(两地调度 |贪心)

题目描述 公司计划面试 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,每个城市都有一半的人在面试。

算法思路 因为要求每个城市都有N个人,所以不能无脑选择最低费用去某城市,当一边人满后不得已只能去另一个城市。
那么最开始可以自由选择去A或B时,是凭借什么做的选择呢?
假如只有两个人,甲去A:10元,去B:20元;选择去A,乙去A:100元,去B:10000元,此时乙不得已只能去B,显然这是不对的。
其实我们起码模糊感觉得到,选择A或B,应该从最大差值开始确定,
class Solution: def twoCitySchedCost(self, costs: List[List[int]]) -> int: f=lambda x:abs(x[0]-x[1]) costs=sorted(costs,key=f,reverse=True) res=0 a=b=len(costs)//2 for i in costs: if b and i[0]>i[1]: res+=i[1] b-=1 elif a and i[0]

【【力扣】1029(两地调度 |贪心)】执行用时 :52 ms, 在所有 Python3 提交中击败了59.02%的用户
内存消耗 :13.6 MB, 在所有 Python3 提交中击败了25.00%的用户

    推荐阅读