计算一次可容纳的最大房间数

时间:2019-06-11 21:30:53

标签: c++ dynamic-programming schedule greedy

在输入中,我们得到一个数字N,表示要进行多少次演示,其后是HHMM格式给出的N行开始和结束时间

示例:

3

0800 0900

0830 1000

0900 1030

代码必须计算占用房间的最大数量(一个房间一次只能容纳一个演示文稿,因此提供的示例的预期输出为2。

我的第一个想法是创建一个表1440 x N(一天中的分钟数,以演示次数为单位),并在举行演示时填充每一分钟,然后逐列查找最大值一次演示。它可以工作,但是我相信它可以更快更好地完成。有人可以建议如何更好地做到这一点吗?

2 个答案:

答案 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},
        }

我会让你弄清楚如何实现这一点。