题目地址:
https://www.lintcode.com/problem/arrange-interview-city/description
给定 N N N个面试者需要面试,公司安排了两个面试的城市 A A A和 B B B,每个面试者到两个城市的花费给定。要求将他们均匀分配到两个城市,使得总花费最少。问最少花费。
思路是贪心。先将所有人都派往 A A A,然后看怎样将其中的部分人派往 B B B使得花费降低最大,显然要找那些 c A − c B c_A-c_B cA−cB最大的那批人( c A c_A cA表示去 A A A城市的花费, c B c_B cB同理)。算法正确性可以由反证法得到。代码如下:
import java.util.List;
public class Solution {
/**
* @param cost: The cost of each interviewer
* @return: The total cost of all the interviewers.
*/
public int TotalCost(List<List<Integer>> cost) {
// write your code here
int res = 0;
// 按照去A的花费减去去B的花费的差从大到小排序
cost.sort((c1, c2) -> -Integer.compare(c1.get(0) - c1.get(1), c2.get(0) - c2.get(1)));
// 前一半人应该去B,剩余的去A
for (int i = 0; i < cost.size(); i++) {
if (i < cost.size() / 2) {
res += cost.get(i).get(1);
} else {
res += cost.get(i).get(0);
}
}
return res;
}
}
时间复杂度 O ( N log N ) O(N\log N) O(NlogN),空间 O ( 1 ) O(1) O(1)。