题解 | #主持人调度(二)#
主持人调度(二)
https://www.nowcoder.com/practice/4edf6e6d01554870a12f218c94e8a299
- 关键在于 hosts 根据时间排序不同,max 的取值大有不同。所以可以确认最大主持人数
- 还有一个比较令人尴尬的是,List 的数组泛型在日常开发中不多见,也是让人难受的。
import java.util.*;
public class Solution {
public int minmumNumberOfHost(int n, int[][] startEnd) {
// 用一个list存储所有的事件,开始时间为+1,结束时间为-1
List<int[]> events = new ArrayList<>();
for (int[] interval : startEnd) {
events.add(new int[]{interval[0], 1}); // 活动开始
events.add(new int[]{interval[1], -1}); // 活动结束
}
// 按时间排序:时间相同的情况下,先处理结束事件
// events.sort((a, b) -> a[0] == b[0] ? a[1] - b[1] : a[0] - b[0]);
events.sort((a,b)->{
if(a[0]!=b[0]){
return Integer.compare(a[0],b[0]);
} else {
return Integer.compare(a[1],b[1]);
}
});
int hosts = 0;
int maxHosts = 0;
for (int[] event : events) {
hosts += event[1]; // 加上当前事件的主持人增减情况
maxHosts = Math.max(maxHosts, hosts); // 更新最大主持人数量
}
return maxHosts;
}
}