LeetCode 253
https://www.lintcode.com/problem/919/description
难度:中等
高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/
给定一系列的会议时间间隔 intervals,包括起始和结束时间[[s1,e1],[s2,e2],…] (si < ei),找到所需的最小的会议室数量。
样例:
输入: intervals = [(0,30),(5,10),(15,20)]
输出: 2
解释:
需要两个会议室
会议室1:(0,30)
会议室2:(5,10),(15,20)
本题考查差分。定义差分数组 diff,对于每个会议,diff[start]++,diff[end]–,然后对 diff 做前缀和,s 的值就是当前需要会议室的数量,s 的最大值就是答案。
时间复杂度:O(n)
空间复杂度:O(n)
class Solution {
public:
int minMeetingRooms(vector<Interval> &intervals) {
int n = intervals.size();
int mx = 0;
for (auto p: intervals) {
mx = max(mx, p.end);
}
vector<int> diff(mx + 1, 0);
for (auto &p: intervals) {
int s = p.start, e = p.end;
diff[s]++;
diff[e]--;
}
int s = 0;
int ans = 0;
for (int x: diff) {
s += x;
ans = max(ans, s);
}
return ans;
}
};