《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(57)乾坤尺量会议室 - 会议室安排(贪心排序)
《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(57)乾坤尺量会议室 - 会议室安排(贪心排序)
哪吒在数据修仙界中继续他的修炼之旅。这一次,他来到了一片神秘的乾坤尺会议室,室内有一把巨大的乾坤尺,尺身闪烁着神秘的光芒。会议室的入口处有一块巨大的石碑,上面刻着一行文字:“欲量此室,需以乾坤尺之力,安排会议室,贪心排序显真身。”
哪吒定睛一看,石碑上还有一行小字:“给定会议时间区间[[0, 30], [5, 10], [15, 20]]
,最小需要2
个会议室。”哪吒心中一动,他知道这是一道关于会议室安排的难题,需要通过贪心排序的方法来找到所需的最小会议室数量。
暴力解法:乾坤尺的初次尝试
哪吒心想:“要找到最小的会议室数量,我可以逐个会议检查。”他催动乾坤尺之力,通过逐个会议安排,试图找到最小的会议室数量。
int minMeetingRooms(vector<vector<int>>& intervals) {
if (intervals.empty()) return 0;
sort(intervals.begin(), intervals.end());
vector<int> rooms;
for (auto& interval : intervals) {
bool found = false;
for (int i = 0; i < rooms.size(); ++i) {
if (interval[0] >= rooms[i]) {
rooms[i] = interval[1];
found = true;
break;
}
}
if (!found) {
rooms.push_back(interval[1]);
}
}
return rooms.size();
}
哪吒成功地计算了所需的最小会议室数量,但乾坤尺的光芒却黯淡了下来。他意识到,这种方法虽然可行,但效率低下,尤其是当会议数量很多时,灵力消耗巨大。
C++语法点
在C++中,会议室安排问题涉及到排序和贪心策略。以下是一些重要特性:
-
排序:
- 使用
sort
函数对会议区间按开始时间排序。 - 常用操作:
sort(intervals.begin(), intervals.end())
:按会议开始时间排序。
- 使用
-
贪心策略:
- 通过维护一个房间列表,记录每个房间的结束时间。
- 常用操作:
- 遍历房间列表,寻找最早可用的房间。
高阶优化:贪心排序的智慧
哪吒元神中突然浮现金色铭文——「乾坤尺量会议室,贪心排序显真身」。他意识到,可以通过贪心排序优化会议室安排过程。
哪吒决定使用贪心算法,先按会议开始时间排序,然后维护一个最小堆来跟踪会议室的结束时间。通过这种方式,他成功地计算了所需的最小会议室数量,而且灵力消耗大幅减少。
int minMeetingRooms(vector<vector<int>>& intervals) {
if (intervals.empty(