1029、两地调度
公司计划面试 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,每个城市都有一半的人在面试。
#方法一
class Solution(object):
def twoCitySchedCost(self,costs):
a = []
b = []
total_b = 0
total_a = 0
for i in range(len(costs)):
a.append((costs[i][0]-costs[i][1]))
b.append(costs[i][0]-costs[i][1])
a.sort()
for i in range(len(a)/2):
print a.index(b[i])
total_a += costs[b.index(a[i])][0]
total_b += costs[b.index(a[len(a)-1-i])][1]
return total_a+total_b
cost = [[10,20],[30,200],[400,50],[30,20],[90,60],[30,70]]
solution = Solution()
print solution.twoCitySchedCost(cost)
#方法二
‘’’
用第一个维度减第二个维度,得到去a城市和去b城市两者的差值,差值负得越多,说明去a城市比去b城市越划算,正得越多则反之。将差值排序,然后每次加一个正得对多的和负得最多得,最后就能得到mincost
class Solution(object):
def twoCitySchedCost(self, costs) :
N = len(costs)
diff = [c[0] - c[1] for c in costs]
indices = sorted(range(0,N), key=lambda k:diff[k])#默认升序
print indices
result = 0
for i in range(int(N/2)):
result += costs[indices[i]][0]
result += costs[indices[N-i-1]][1]
return result
cost = [[10,20],[30,200],[400,50],[30,20],[90,60],[30,70]]
solution = Solution()
print solution.twoCitySchedCost(cost)