将会议的开始时间和结束时间分别排序。每当会议开始时,所需会议室数count加一;每当会议结束时,所需会议室数count减一。最终所得最大会议室数即为答案
public:
int minMeetingRooms(vector<vector<int> >& intervals) {
int n = intervals.size();
vector<int> starti = vector<int>(n);
vector<int> endi = vector<int>(n);
for(int i = 0; i < n; ++i)
{
starti[i] = intervals[i][0];
endi[i] = intervals[i][1];
}
sort(starti.begin(), starti.end()); //将starti和endi排序
sort(endi.begin(), endi.end());
int count = 0;
int max_count = 0;
int i = 0;
int j = 0;
int k = 0;
while(j < n)
{
if(starti[i] == k) //当会议开始时会议室数count加一
{
++count;
++i;
}
if(endi[j] == k) //当会议结束时会议室数count减一
{
--count;
++j;
}
++k;
max_count = max(max_count, count); //count中最大值为须准备会议室数
}
return max_count;
}
};