【力扣】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]<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%的用戶

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章