给定一个维度为N * 2 的二维数组arr[][] ,其中包含给定日期N 个会议的开始和结束时间。任务是打印可以举行最多并发会议的时间段列表。
例子:
Input: arr[][] = {{100, 300}, {145, 215}, {200, 230}, {215, 300}, {215, 400}, {500, 600}, {600, 700}}
Output: [215, 230]
Explanation:
The given 5 meetings overlap at {215, 230}.
Input: arr[][] = {{100, 200}, {50, 300}, {300, 400}}
Output: [100, 200]
方法:想法是使用Min-Heap来解决这个问题。以下是步骤:
- 根据会议的开始时间对数组进行排序。
- 初始化一个min-heap 。
- 初始化变量max_len 、 max_start和max_end分别存储最小堆的最大大小、并发会议的开始时间和结束时间。
- 迭代排序后的数组并继续从min_heap弹出直到arr[i][0]变得小于min_heap的元素,即弹出所有结束时间小于当前会议开始时间的会议,并推送arr[i] [1]到min_heap 。
- 如果 min_heap 的大小超过max_len ,则更新max_len = size(min_heap) 、 max_start = meeting[i][0]和max_end = min_heap_element。
- 最后返回max_start和max_end的值。
下面是上述方法的实现:
C++14
Java
输出:
时间复杂度: O(N * logN)
辅助空间: O(N)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live