LeetCode 252. 会议室
给定一个会议时间安排的数组 intervals
,每个会议时间都会包括开始和结束的时间 intervals[i] = [starti, endi]
,请你判断一个人是否能够参加这里面的全部会议。
示例 1:
输入:intervals = [[0,30],[5,10],[15,20]]
输出:false
method
排序完比较就行
bool canAttendMeetings(vector<vector<int>>& intervals) {
sort(intervals.begin(), intervals.end());
for (int i = 0; i < intervals.size(); i++) {
if (i > 0 && intervals[i][0] < intervals[i - 1][1]) return false;
}
return true;
}
253. 会议室 II
给你一个会议时间安排的数组 intervals
,每个会议时间都会包括开始和结束的时间 intervals[i] = [starti, endi]
,返回 所需会议室的最小数量 。
示例 1:
输入:intervals = [[0,30],[5,10],[15,20]]
输出:2
method
求任意时刻存在重叠的区间的最大值
按开始时间和结束时间进行排序,来一个开始时间,cur
就加1,来一个结束时间,cur
就减1,保存cur
的最大值
struct cmp {
bool operator()(const pair<int,int>& lhs, const pair<int,int>& rhs) {
if (lhs.first == rhs.first) return lhs.second < rhs.second;
return lhs.first < rhs.first;
}
};
int minMeetingRooms(vector<vector<int>>& intervals) {
vector<pair<int, int>> times;
for (auto& elem : intervals) {
times.push_back({elem[0], 1});
times.push_back({elem[1], -1});
}
sort(times.begin(), times.end(), cmp()); // 不用cmp也可以
int res = 0;
int cur = 0;
for (auto& t : times) {
cur += t.second;
res = max(res, cur);
}
return res;
}