• [Swift]LeetCode1029. 两地调度 | Two City Scheduling


    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址: https://www.cnblogs.com/strengthen/p/10744640.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    There are 2N people a company is planning to interview. The cost of flying the i-th person to city A is costs[i][0], and the cost of flying the i-th person to city B is costs[i][1].

    Return the minimum cost to fly every person to a city such that exactly Npeople arrive in each city.

    Example 1:

    Input: [[10,20],[30,200],[400,50],[30,20]]
    Output: 110
    Explanation: 
    The first person goes to city A for a cost of 10.
    The second person goes to city A for a cost of 30.
    The third person goes to city B for a cost of 50.
    The fourth person goes to city B for a cost of 20.
    
    The total minimum cost is 10 + 30 + 50 + 20 = 110 to have half the people interviewing in each city.

    Note:

    1. 1 <= costs.length <= 100
    2. It is guaranteed that costs.length is even.
    3. 1 <= costs[i][0], costs[i][1] <= 1000

    公司计划面试 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. 1 <= costs.length <= 100
    2. costs.length 为偶数
    3. 1 <= costs[i][0], costs[i][1] <= 1000

    Runtime: 16 ms
    Memory Usage: 19.3 MB
     1 class Solution {
     2     func twoCitySchedCost(_ costs: [[Int]]) -> Int {
     3         var base:Int = 0
     4         var n:Int = costs.count
     5         var cs:[Int] = [Int](repeating:0,count:n)
     6         for (index,cost) in costs.enumerated()
     7         {
     8             base += cost[0]
     9             cs[index] = cost[1] - cost[0]  
    10         }
    11         cs.sort()
    12         for i in 0..<n/2
    13         {
    14             base += cs[i]
    15         }
    16         return base
    17     }
    18 }

    16ms
     1 class Solution {
     2     func twoCitySchedCost(_ costs: [[Int]]) -> Int {
     3         var costDiff = costs.sorted(by: { $0[1] - $0[0]  > $1[1] - $1[0] })
     4         var minCost = 0
     5         for i in 0..<costs.count {
     6             if i < costs.count / 2 {
     7                 minCost += costDiff[i][0]
     8             } else {
     9                 minCost += costDiff[i][1]
    10             }
    11         }
    12         return minCost
    13     }
    14 }

    20ms

     1 class Solution {
     2     func twoCitySchedCost(_ costs: [[Int]]) -> Int {           
     3         let costs = costs.sorted { (a, b) in
     4             return abs(a[0] - a[1]) > abs(b[0] - b[1])
     5         }
     6         let N = costs.count / 2
     7         var c1 = 0, c2 = 0, ans = 0
     8         for i in 0..<2*N {
     9             if ((costs[i][0] < costs[i][1] && c1 < N) || c2 == N) {
    10                 ans += costs[i][0]
    11                 c1 += 1
    12             }
    13             else {
    14                 ans += costs[i][1]
    15                 c2 += 1
    16             }
    17         }
    18         return ans
    19 
    20     }
    21 }

    24ms

     1 class Solution {
     2     func twoCitySchedCost(_ costs: [[Int]]) -> Int {
     3         
     4         var count = 0
     5         var deltaAtoB = [Int]()
     6         var deltaBtoA = [Int]()
     7         var result = 0
     8         for cost in costs {
     9             if cost[0] <= cost[1] {
    10                 count += 1
    11                 result += cost[0]
    12                 deltaBtoA.append(cost[1] - cost[0])
    13             } else {
    14                 count -= 1
    15                 result += cost[1]
    16                 deltaAtoB.append(cost[0] - cost[1])
    17             }
    18         }
    19 
    20         if count == 0 {
    21             return result
    22         } else if count > 0 {
    23             deltaBtoA.sort()
    24             for i in 0..<count/2 {
    25                 result += deltaBtoA[i]
    26             }
    27         } else {
    28             deltaAtoB.sort()
    29             for i in 0..<abs(count)/2 {
    30                 result += deltaAtoB[i]
    31             }
    32         }
    33         return result
    34     }
    35 }

    28ms

     1 class Solution {
     2     func twoCitySchedCost(_ costs: [[Int]]) -> Int {
     3         var costDiff = costs.sorted(by: { $0[1] - $0[0]  > $1[1] - $1[0] })
     4         var minCost = 0
     5         for i in 0..<costs.count {
     6             if i < costs.count / 2 {
     7                 minCost += costDiff[i][0]
     8             } else {
     9                 minCost += costDiff[i][1]
    10             }
    11         }
    12         return minCost
    13     }
    14 }

    32ms

     1 class Solution {
     2     func twoCitySchedCost(_ costs: [[Int]]) -> Int {
     3         let N = costs.count / 2
     4         var dp = [[Int]]()
     5         
     6         for i in 0...N {
     7             let row = Array(repeating: 0, count: N+1)
     8             dp.append(row)
     9         }
    10         
    11         for i in 1...N {
    12             dp[i][0] = dp[i-1][0] + costs[i-1][0]
    13         }
    14         
    15         for j in 1...N {
    16             dp[0][j] = dp[0][j-1] + costs[j-1][1]
    17         }
    18         
    19         for i in 1...N {
    20             for j in 1...N {
    21                 dp[i][j] = min(dp[i-1][j] + costs[i+j-1][0], dp[i][j-1] + costs[i+j-1][1])
    22             }
    23         }
    24         
    25         return dp[N][N]
    26     }
    27 }

    44ms

     1 class Solution {
     2     func twoCitySchedCost(_ costs: [[Int]]) -> Int {
     3         var costsrt = costs.sorted(by: {return abs($0[0]-$0[1]) >= abs($1[0]-$1[1])})
     4         
     5         var N = costs.count / 2
     6         var A = 0
     7         var B = 0
     8         var ac = 0
     9         var bc = 0
    10         
    11         for p in costsrt {
    12             if (p[0] > p[1] && bc < N) || ac == N {
    13                 B += p[1]
    14                 bc += 1
    15                 print("B:", p[1])
    16             } else {
    17                 A += p[0]
    18                 ac += 1
    19                 print("A:", p[0])
    20             }
    21         }
    22         
    23         return A+B
    24     }
    25 }
  • 相关阅读:
    http://www.cplusplus.com/reference/string/string/find_last_of/

    SQL Server数据库设计表和字段的经验
    AMP产品识别
    水晶头AMP识别
    双绞线的规范和制作经验谈
    VB.net 产生随机验证码
    手把手教您架设Windows2003共享服务器
    使用EasyRecovery Pro 6.04恢复RAW格式硬盘的数据实战
    .NET中各种数据库连接大全
  • 原文地址:https://www.cnblogs.com/strengthen/p/10744640.html
Copyright © 2020-2023  润新知