小李飛刀:作題第十二彈!

寫在前面

今天沒有叨逼叨...可是又一次錯過了競賽...
愛睡覺的小李...下週要上班,下下週必定要參加了(握拳面試

認真作題的分割線

第一題

1029. 兩地調度
公司計劃面試2N人。第i人飛往 A 市的費用爲 costsi,飛往 B 市的費用爲 costsi
返回將每一個人都飛到某座城市的最低費用,要求每一個城市都有N人抵達。.net

示例:code

輸入:[[10,20],[30,200],[400,50],[30,20]]
輸出:110
解釋:
第一我的去 A 市,費用爲 10。
第二我的去 A 市,費用爲 30。
第三我的去 B 市,費用爲 50。
第四我的去 B 市,費用爲 20。

最低總費用爲 10 + 30 + 50 + 20 = 110,每一個城市都有一半的人在面試。blog

提示:ci

1 <= costs.length <= 100
costs.length 爲偶數
1 <= costsi, costs i <= 1000

個人題解:leetcode

class Solution(object):
    def twoCitySchedCost(self, costs):
        """
        :type costs: List[List[int]]
        :rtype: int
        """
        costs = sorted(costs,key = lambda x:abs(x[0] - x[1]))
        costs = costs[::-1]
        a,b = 0,0
        n = len(costs) //2
        res = 0
        for i in costs:
            if a < n and b < n:
                if i[0] < i[1]:
                    a += 1
                    res += i[0]
                else:
                    b += 1
                    res += i[1]
            elif a<n:
                a += 1
                res += i[0]
            else:
                b += 1
                res += i[1]
                
        return res

個人思路:
參考了小江同窗的思路(她的blog還在小黑屋...後續補上連接)和這位同窗的思路。get

  1. 先判斷每一個人去往兩地的成本差,成本差越大的同窗要越早被安排的明明白白
  2. 而後分配人員,先分配滿n我的的組再也不加人,其餘的都去另外一個組
相關文章
相關標籤/搜索