计算一次占用的最大房间数
Calculate maximum number of rooms occupied at once
在输入上,我们得到一个数字 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},
}
我会让你弄清楚如何实现这一点。
相关文章:
- 我是否需要在下一次转移时将所有权*转移回转移队列
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 在C++中一次将矢量值写入多个文件
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 为什么 zlib 放气初始化调用一次不起作用?
- 在一次迭代中从 txt 文件中读取多行
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- 有没有办法一次声明相同类型的多个对象,并通过一个表达式立即使用相同的右值初始化它们?
- 高级选择排序 - 在一次迭代中搜索两个元素
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 如何仅使用一次固定<<设置精度(2)?或者至少恢复到默认行为?
- 什么是仅调用一次并调用参数的控制台应用
- 如何确保用户在一行上提示输入一次时输入名字和姓氏?
- (C++)虽然循环一次不起作用,但我引入了多个变量
- 为什么我的信号处理程序只执行一次?
- 如何使用C++一次读取整个二进制文件
- 花括号使循环运行一次?
- 从子菜单返回后,正确的输入至少进入验证循环一次
- 计算一次占用的最大房间数