Two City Scheduling
https://leetcode.com/contest/weekly-contest-133/problems/two-city-scheduling/
一个数组,每个元素有两个数,问其中一半取第一个,另一半取第二个,能使得总和最小,此时和是多少。
There are
2Npeople a company is planning to interview. The cost of flying thei-th person to cityAiscosts[i][0], and the cost of flying thei-th person to cityBiscosts[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 <= costs.length <= 100It is guaranteed that
costs.lengthis even.
1 <= costs[i][0], costs[i][1] <= 1000
Thoughts
假设A取的都是first, 那么A是想取first和sec中尽量都是first小的,也就是每个单独能max(sec - first)的。同理B是想取max(f - s), 也就是min(sec - first)。因此对first-sec排序,前一半归A, 后一半归B. a[0] - a[1] < b[0] - b[1] => a[0] + b[1] < a[1] + b[0] 意味着a去0b去1比a去1比b去0好。当有多个元素时,前一半去A后一半去B比任意调换其中顺序的结果好。
Last updated
Was this helpful?