给你一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] = [starti, endi] ,返回 所需会议室的最小数量 。
示例 1:
输入:intervals = [[0,30],[5,10],[15,20]]
输出:2
示例 2:
输入:intervals = [[7,10],[2,4]]
输出:1
【思路】:本题思路非常好,称为上下车问题
不用在意是谁上车还是下车,只需要注意什么时候上下车就可以。 以第一个示例来说:
↑ ↑ ↓ ↑ ↓ ↓
0----5----10----15-----20-----------30-->
这样可以把上车和下车的时间分成两组,通过两个指针滑动的方式,判断同时在车上的最大数就可以了。
和我之前做的:知道秘密的人数
本题与这两题有异曲同工之妙
【代码】:
/**
* @param {number[][]} intervals
* @return {number}
*/
var minMeetingRooms = function(intervals) {
var maxTime = 0;
for(let i= 0 ;i < intervals.length;i++){
let end = intervals[i][1];
if(end > maxTime) maxTime = end;
}
var time = new Array(maxTime + 1).fill(0); //模拟时间线
for(let i =0 ;i < intervals.length;i++){
let start = intervals[i][0];
let end = intervals[i][1];
time[start]++; //表示这里是有time[start]个人上车的
time[end]--; //表示这个时刻是有time[end]个人下车的
}
var dp = new Array(maxTime + 1).fill(0);
dp[0] = time[0];
var max = 0;
for(let i = 1;i < dp.length;i++){
dp[i] = dp[i - 1] + time[i];
max = Math.max(max, dp[i])
}
return max
};