一.问题描述
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 N
people 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 <= costs.length <= 100
- It is guaranteed that
costs.length
is even. 1 <= costs[i][0], costs[i][1] <= 1000
二.解决思路
用第一个维度减第二个维度
得到去a城市和去b城市两者的差值
差值负得越多,说明去a城市比去b城市越划算,正得越多则反之
将差值排序,然后每次加一个正得对多的和负得最多得,最后就能得到mincost
更多leetcode算法题解法请关注我的专栏leetcode算法从零到结束或关注我
欢迎大家一起讨论一起刷题一起ac
三.源码
class Solution:
def twoCitySchedCost(self, costs: List[List[int]]) -> int:
N = len(costs)
diff = [c[0] - c[1] for c in costs]
indices = sorted(range(0,N), key=lambda k:diff[k])
result = 0
for i in range(int(N/2)):
result += costs[indices[i]][0]
result += costs[indices[N-i-1]][1]
return result