253. 会议室 II
给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间 [[s1,e1],[s2,e2],...]
(si < ei),为避免会议冲突,同时要考虑充分利用会议室资源,请你计算至少需要多少间会议室,才能满足这些会议安排。
示例 1:
输入:
[[0, 30],[5, 10],[15, 20]]
输出: 2
示例 2:
输入:
[[7,10],[2,4]]
输出: 1
思路:
可以理解成上下车问题,开始时间就相当于上车,结束时间相当于下车,整体的流程,如下
↑ ↑ ↓ ↑ ↓ ↓
0----5----10-----15----20-----30
代码:
/**
* @param {number[][]} intervals
* @return {number}
*/
var minMeetingRooms = function(intervals) {
let len = intervals.length;
if(len == 0){
return 0;
}
let a = new Array(len),b = new Array();
for(let i = 0; i< len ;++i){
a[i] = intervals[i][0];
b[i] = intervals[i][1];
}
a.sort((a,b)=>a-b); // 开始时间排序
b.sort((a,b)=>a-b); // 结束时间排序
let a_pos = 0,b_pos = 0,res =0;
while(b_pos<len && a_pos<len){
while(a_pos<len && a[a_pos]<b[b_pos]) a_pos++; //在遇到第一个下车点之前,不断上车
res = Math.max(res,a_pos-b_pos);
while(b_pos<len &&a[a_pos]>=b[b_pos]) b_pos++;
}
return res;
};