题目描述
- 给定一个数组,长度为 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 := 0n := len(costs) / 2for i := 0; i < n; i ++ {res += costs[i][0]}for i := n; i < 2 * n; i ++ {res += costs[i][1]}return res
}