在输入中,我们得到一个数字N,表示要进行多少次演示,其后是HHMM格式给出的N行开始和结束时间
示例:
3
0800 0900
0830 1000
0900 1030
代码必须计算占用房间的最大数量(一个房间一次只能容纳一个演示文稿,因此提供的示例的预期输出为2。
我的第一个想法是创建一个表1440 x N(一天中的分钟数,以演示次数为单位),并在举行演示时填充每一分钟,然后逐列查找最大值一次演示。它可以工作,但是我相信它可以更快更好地完成。有人可以建议如何更好地做到这一点吗?
答案 0 :(得分:1)
实际上非常简单:我们只是模拟该过程。首先,现在正在进行的演示都无关紧要。我们只关心演示的数量。因此,我们只有一个计数器,可以在演示文稿开始或结束时进行更新。
我们可以在模拟的每一分钟进行迭代,但是我们的计数器仅在演示文稿开始或结束时才会更改,因此我们可以对所有开始和结束事件做一个大列表,按时间对列表进行排序,然后进行迭代该列表会适当调整我们的计数器。
答案 1 :(得分:0)
您建议的方式需要1440 x 3 = 4320
值。如您所知,这是非常低效的。更好的方法是仅存储实际需要的分钟数。要保存更少的值,请将时间分成30分钟的时间段。
现在使用字典(std::map
)来统计在同一时间段内有多少个演示文稿。对于您的示例,它给出:
std::map<std::string, int> slots =
{
{"0800", 1},
{"0830", 2},
{"0900", 2},
{"0930", 2},
{"1000", 1},
{"1030", 1},
}
我会让你弄清楚如何实现这一点。