lc1029-两地调度

题目描述

  • 给定一个数组,长度为 2n,表示 2n 个人
  • 每个元素都是一个二元组,前一个数表示去 a 的路费,后一个数表示去 b 的路费
  • 需要让 n 个人去 a,另 n 个人去 b,求最小总花费

示例

输入:costs = [[10,20],[30,200],[400,50],[30,20]]
输出:110
解释:
第一个人去 a
第二个人去 a
第三个人去 b
第四个人去 b
总花费:10 + 30 + 50 + 20 = 110

题解

  • 思路:贪心
    • 让去 a 便宜的人去 a,让去 b 便宜的人去 b
    • 方法:对 costs 数组按二元组的差值排序。前 n 个人差值小,说明去 a 便宜;后 n 个人差值大,说明去 b 便宜
    • 怎么想到的?答:看题解~
func twoCitySchedCost(costs [][]int) int {
    sort.Slice(costs, func(i, j int) bool {
        return costs[i][0] - costs[i][1] < costs[j][0] - costs[j][1]
    })

    res := 0
    n := len(costs) / 2
    for i := 0; i < n; i ++ {
        res += costs[i][0]
    }
    for i := n; i < 2 * n; i ++ {
        res += costs[i][1]
    }
    return res
}
posted @ 2025-09-16 20:35  余越  阅读(17)  评论(0)    收藏  举报