题解 | #主持人调度(二)#
主持人调度(二)
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; } }