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
解法1: Sweep Line / 扫描线
扫描线的基础题。基本的思路是把所有的线段的两个断点都归类并且排序,然后碰到起点就+1,碰到终点就-1,按照时间的顺序遍历,相当于有一根线在从左面扫到右面。
实际在写code的时候可以有不同的写法,第一种是用了一种比较少用的数据结构,TreeMap。这个hashmap存储的是对于每一个时间点的计数,不同的是,对于起点计数+1,对于终点计数-1, 表现的就是如果一个会议结束了当前的room就释放出来不需要了,所以自然需要的room的个数-1。然后需要按照时间顺序遍历每一个时间点,把所有的room的变化加和,在加和的过程中保留下遇见过的最大值)。TreeMap的key是按照natural order排序的,所以很适合这个问题。
|
|
解法2: Sorting Array
同样的思路,不同的写法。也可以维护两个数组,start, end. 把对应的时间点放进去进行排序。然后用两个指针指向两个数组,当start < end的时候需要的room+1, 反之则room-1. 然后在更新的过程中统计出现过的最大的room的个数。