两地调度
难度:
标签:
题目描述
代码结果
运行时间: 24 ms, 内存: 16.1 MB
/*
* 思路:
* 1. 计算每个人去a市和b市的成本差
* 2. 根据成本差对costs进行排序
* 3. 选择前n个人去a市,后n个人去b市
*/
import java.util.Arrays;
import java.util.Comparator;
public class Solution {
public int twoCitySchedCost(int[][] costs) {
return Arrays.stream(costs)
// 按照去a市和b市的成本差进行排序
.sorted(Comparator.comparingInt(a -> a[0] - a[1]))
// 将前n个人去a市的费用和后n个人去b市的费用相加
.mapToInt((cost, index) -> index < costs.length / 2 ? cost[0] : cost[1])
.sum();
}
public static void main(String[] args) {
Solution sol = new Solution();
int[][] costs = {{10, 20}, {30, 200}, {400, 50}, {30, 20}};
System.out.println(sol.twoCitySchedCost(costs)); // 输出: 110
}
}
解释
方法:
此题解的思路是首先计算每个人去A市和B市的费用差,并基于此差值进行决策。首先,对于每个人,如果去A市比去B市便宜,就先选定其去A市,反之则去B市。之后,根据已选的结果检查A市和B市是否人数均为n。如果某城市人数过多,将需要重新考虑一些人的目的地,选取使总成本最小增加的方案。这通过计算差值的绝对值最小的调整来实现,以确保在调整人数以满足条件时增加的成本最小。
时间复杂度:
O(n^2)
空间复杂度:
O(n)
代码细节讲解
🦆
解题思路中提到的'成本差'是如何计算的?具体是哪两个成本之间的差异?
▷🦆
为什么在初步分配后,选择将成本差较小的个体进行重新分配,而不是直接选择成本最高的个体?
▷🦆
题解中提到的调整策略是否保证了最终的总成本是最低的?是否存在更优的调整策略?
▷