问题描述
小C点了一个外卖,并且急切地等待着骑手的送达。她想知道她的外卖是否超时了。
已知小C在时刻 t1
点了外卖,外卖平台上显示的预计送达时间为 t2
,而实际送达时间为 t3
。需要判断外卖是否超时。如果外卖超时,则输出 "Yes"
;否则输出 "No"
。
t3
在 t2
之后则认定为超时。
实际送达时间与预计送达时间在 2
小时之内。
测试样例
示例 1:
输入:
t1 = "18:00", t2 = "19:05", t3 = "19:05"
输出:"No"
为了解决这个问题,我们需要判断外卖的实际送达时间是否超出了预计的送达时间。如果实际送达时间(t3)晚于预计送达时间(t2),并且晚点的时间在2小时之内,则可以认为外卖超时。否则,外卖没有超时。
解决步骤:
- 输入时间格式:所有时间的格式是 "HH:MM",例如 "18:00"。我们需要将其转换为分钟数,便于比较。
- 转换时间为分钟数:我们可以通过
小时 * 60 + 分钟
来将 "HH:MM" 格式的时间转换为自午夜零点以来的分钟数。 - 比较:将
t2
和t3
转换为分钟数后进行比较,如果t3
超过t2
,则判定为超时。如果超出超过2小时,则为不合理数据。
解题思路:
- 将
t2
和t3
分别转换为分钟数。 - 如果
t3
大于t2
且t3 - t2 <= 120
,则输出 "Yes",表示超时。 - 否则输出 "No",表示没有超时。
代码实现:
def solution(t1, t2, t3):
# 将时间转换为分钟数
def time_to_minutes(time_str):
hours, minutes = map(int, time_str.split(":"))
return hours * 60 + minutes
# 将 t2 和 t3 转换为分钟数
t2_minutes = time_to_minutes(t2)
t3_minutes = time_to_minutes(t3)
# 判断是否超时
if t3_minutes > t2_minutes and t3_minutes - t2_minutes <= 120:
return "Yes"
else:
return "No"
if __name__ == '__main__':
print(solution("18:00", "19:05", "19:05") == 'No')
print(solution("23:00", "00:21", "00:23") == 'Yes')
print(solution("23:05", "00:05", "23:58") == 'No')
解释:
time_to_minutes(time_str)
:将时间字符串转换为从零点起的分钟数,方便进行比较。t2_minutes
和t3_minutes
分别存储t2
和t3
转换后的分钟数。- 如果实际送达时间
t3
晚于预计送达时间t2
,并且晚点不超过2小时(即t3_minutes - t2_minutes <= 120
),则认为超时,返回"Yes"
。否则返回"No"
。
复杂度分析:
- 时间复杂度:
O(1)
,因为所有的操作都是常数时间复杂度。 - 空间复杂度:
O(1)
,只使用了少量的变量存储中间结果。
题外话:那如果t1 = "23:00", t2 = "00:21",这两个时间怎么转化比较?
当 t1 = "23:00"
和 t2 = "00:21"
时,虽然这两个时间看起来在不同的日期,但我们可以通过统一转换为“自午夜零点以来的分钟数”来进行比较。因为一天是 24 小时制,所以需要考虑时间跨越午夜的情况。
解决思路
- 时间转换为分钟数:我们会先将两个时间转换为自午夜零点以来的分钟数。
- 处理跨越午夜的情况:因为
t2 = "00:21"
可能是第二天的时间,所以需要在t2
计算时加上 24 小时的分钟数(即 1440 分钟)。这样就能避免跨越午夜时的错误比较。
转换步骤
1. 将时间转换为分钟数
-
对于
t1 = "23:00"
,首先把小时23
和分钟00
转换为分钟数:t1_minutes=23×60+0=1380 分钟t1_minutes=23×60+0=1380分钟
-
对于
t2 = "00:21"
,首先把小时00
和分钟21
转换为分钟数:t2_minutes=0×60+21=21 分钟t2_minutes=0×60+21=21分钟
但是,
t2
实际上是跨过午夜的时间,所以我们需要加上 1440 分钟(一天的分钟数)来处理跨午夜的情况:t2_minutes_adjusted=21+1440=1461 分钟t2_minutes_adjusted=21+1440=1461分钟
2. 比较时间差
-
现在,我们有:
t1_minutes = 1380
(表示23:00
)t2_minutes_adjusted = 1461
(表示00:21
,经过调整后)
比较这两个时间的分钟数:
时间差=1461−1380=81 分钟时间差=1461−1380=81分钟
所以,
t2
其实比t1
晚 81 分钟。这样就确保了无论时间是否跨越午夜,都能准确地进行比较和计算时间差。
(暂且到这,下次再见!)