LeetCode 1904. 你完成的完整对局数
一款新的在线电子游戏在近期发布,在该电子游戏中,以 刻钟 为周期规划若干时长为 15 分钟 的游戏对局。这意味着,在 HH:00、HH:15、HH:30 和 HH:45 ,将会开始一个新的对局,其中 HH 用一个从 00 到 23 的整数表示。游戏中使用 24 小时制的时钟 ,所以一天中最早的时间是 00:00 ,最晚的时间是 23:59 。
给你两个字符串 startTime 和 finishTime ,均符合 "HH:MM" 格式,分别表示你 进入 和 退出 游戏的确切时间,请计算在整个游戏会话期间,你完成的 完整对局的对局数 。
例如,如果 startTime = "05:20" 且 finishTime = "05:59" ,这意味着你仅仅完成从 05:30 到 05:45 这一个完整对局。而你没有完成从 05:15 到 05:30 的完整对局,因为你是在对局开始后进入的游戏;同时,你也没有完成从 05:45 到 06:00 的完整对局,因为你是在对局结束前退出的游戏。
如果 finishTime 早于 startTime ,这表示你玩了个通宵(也就是从 startTime 到午夜,再从午夜到 finishTime)。
假设你是从 startTime 进入游戏,并在 finishTime 退出游戏,请计算并返回你完成的 完整对局的对局数 。
示例 1:
输入:startTime = "12:01", finishTime = "12:44"
输出:1
解释:你完成了从 12:15 到 12:30 的一个完整对局。
你没有完成从 12:00 到 12:15 的完整对局,因为你是在对局开始后的 12:01 进入的游戏。
你没有完成从 12:30 到 12:45 的完整对局,因为你是在对局结束前的 12:44 退出的游戏。
示例 2:
输入:startTime = "20:00", finishTime = "06:00"
输出:40
解释:你完成了从 20:00 到 00:00 的 16 个完整的对局,以及从 00:00 到 06:00 的 24 个完整的对局。
16 + 24 = 40
示例 3:
输入:startTime = "00:00", finishTime = "23:59"
输出:95
解释:除最后一个小时你只完成了 3 个完整对局外,其余每个小时均完成了 4 场完整对局。
提示:
startTime 和 finishTime 的格式为 HH:MM
00 <= HH <= 23
00 <= MM <= 59
startTime 和 finishTime 不相等
思路
我们可以将开始时间和结束时间先进行一次规范化处理,这样可以减少判断。
具体来说,我们可以对开始时间的分数进行如下处理:
- 如果开始时间的分数在 (0,15) 之间,那么可以等价于在 15 分开始,因此可以将开始时间直接置为 15 而不会影响答案。
- 类似地开始时间在 (15,30)可以置为 30。
需要注意的是对于 (45, 60) 置为 0 的过程,需要将小时进位。
结束时间也是类似的,不再赘述,大家看代码即可。
接下来,我们计算结束时间和开始时间之间的分钟差 span,计算 span 拥有多少完成的 15 min 即可,也就是说可以用 span 整除 15 即可。
关键点
- 将开始时间和结束时间规范到标准时间
代码
- 语言支持:Python3
class Solution:
def numberOfRounds(self, startTime: str, finishTime: str) -> int:
sh, sm = map(int, startTime.split(":"))
eh, em = map(int, finishTime.split(":"))
if 0 < sm < 15:
sm = 15
elif 15 < sm < 30:
sm = 30
elif 30 < sm < 45:
sm = 45
elif 45 < sm < 60:
sm = 0
sh += 1
if 0 < em < 15:
em = 0
elif 15 < em < 30:
em = 15
elif 30 < em < 45:
em = 30
elif 45 < em < 60:
em = 45
st = sh * 60 + sm
et = eh * 60 + em
if st > et:
et += 24 * 60
return (et - st) // 15
复杂度分析
令 n 为数组长度。
- 时间复杂度:$O(n)$
- 空间复杂度:$O(n)$
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论