Meeting Rooms II

update Aug 12, 2017 10:39

LeetCodearrow-up-right

Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si < ei), find the minimum number of conference rooms required.

For example,

Given [[0, 30],[5, 10],[15, 20]],
return 2.

Basic Idea:

这里arrow-up-right 是非常好的分析。

基本思路就是对start时间和end时间分别排序,然后维持两个指针开始遍历两个数组。具体思路如下图所示(摘自leetcode discussion)

这种思路可以算作是:基于事件的分析

Java Code:

update Sep 16 2018, 13:58

Update: 扫描线法

这个方法的本质和之前是一样的,也是将start和end平等对待,将其当做两种事件。先将每个时间点拿出来,标记为start或者end,然后将他们一起排序。之后从左往右扫描,遇到start就记为overlap+1,遇到end就记为overlap-1,返回值就是历史上最大的overlap数量。但是需要注意的是如果出现一个start和end在同一时间出现,我们需要保证end出现在start的前面,所以需要特别定制comparator的规则。

Java Code:

update Jul 4, 2021

使用了 Stream 的扫描线算法

Last updated