计算一次占用的最大房间数

Calculate maximum number of rooms occupied at once

本文关键字:房间 一次 计算      更新时间:2023-10-16

在输入上,我们得到一个数字 N,说明要给出多少个演示文稿,后跟 N 行以 HHMM 格式给出的开始和结束时间

例:

3

0800 0900

0830 1000

0900 1030

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

我的第一个想法是创建一个布尔值 1440 x N(一天中按演示次数计算的分钟数(表,并在举行演示时填充每一分钟,然后逐列浏览并一次找到演示文稿的最大值。它有效,但我相信它可以做得更快更好。有人可以建议如何以更好的方式做到这一点吗?

其实很简单:我们只是模拟这个过程。首先,现在进行哪些演示并不重要。我们关心的只是发生的演示数量。因此,我们只有一个计数器,当演示文稿开始或结束时,我们会更新该计数器。

我们可以每分钟迭代一次模拟,但是我们的计数器仅在演示开始或结束时更改,因此我们可以制作所有开始和结束事件的大列表,按时间对列表进行排序,并迭代列表适当调整我们的计数器。

你提出的方式需要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},
        }

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