題目描述
公司計劃面試 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]<i[1]:
res+=i[0]
a-=1
elif not a and b:
res+=i[1]
b-=1
else:
res+=i[0]
a-=1
return res
執行用時 :52 ms, 在所有 Python3 提交中擊敗了59.02%的用戶
內存消耗 :13.6 MB, 在所有 Python3 提交中擊敗了25.00%的用戶