问题描述
小C点了一个外卖,并且急切地等待着骑手的送达。她想知道她的外卖是否超时了。
已知小C在时刻 t1 点了外卖,外卖平台上显示的预计送达时间为 t2,而实际送达时间为 t3。需要判断外卖是否超时。如果外卖超时,则输出 "Yes";否则输出 "No"。
t3 在 t2 之后则认定为超时。
实际送达时间与预计送达时间在 2 小时之内。
测试样例
示例 1:
输入:
t1 = "18:00", t2 = "19:05", t3 = "19:05"
输出:"No"
示例 2:
输入:
t1 = "23:00", t2 = "00:21", t3 = "00:23"
输出:"Yes"
示例 3:
输入:
t1 = "23:05", t2 = "00:05", t3 = "23:58"
输出:"No"
解题思路
1. 问题理解
我们需要判断外卖是否超时。已知小C在时刻 t1 点了外卖,外卖平台上显示的预计送达时间为 t2,而实际送达时间为 t3。如果 t3 在 t2 之后,则认定为超时。
2. 数据结构选择
由于我们处理的是时间,可以使用 datetime 模块来处理时间相关的操作。datetime 模块提供了 datetime 类和 timedelta 类,分别用于表示日期时间对象和时间差。
3. 算法步骤
-
解析时间:
- 使用
datetime.strptime方法将字符串格式的时间t1、t2和t3转换为datetime对象。
- 使用
-
处理跨天的情况:
- 如果
t2或t3小于t1,说明它们是第二天的时刻。在这种情况下,我们需要将t2或t3加上一天的时间差。
- 如果
-
比较时间:
- 比较
t2和t3的时间对象。如果t2小于t3,则返回"Yes",表示超时;否则返回"No",表示未超时。
- 比较
4. 具体步骤
-
解析时间:
- 使用
datetime.strptime(t2, "%H:%M")和datetime.strptime(t3, "%H:%M")将t2和t3转换为datetime对象。
- 使用
-
处理跨天的情况:
- 如果
t2 < t1,则time1 += timedelta(days=1)。 - 如果
t3 < t1,则time2 += timedelta(days=1)。
- 如果
-
比较时间:
- 如果
time1 < time2,则返回"Yes"。 - 否则返回
"No"。
- 如果
解题代码
代码详解
导入模块:
from datetime import datetime, timedelta
- 导入
datetime和timedelta模块,用于处理时间和时间差。
定义 solution 函数:
def solution(t1: str, t2: str, t3: str) -> str:
- 定义一个名为
solution的函数,接受三个字符串参数t1、t2和t3,并返回一个字符串。
解析时间:
time1 = datetime.strptime(t2, "%H:%M") time2 = datetime.strptime(t3, "%H:%M")
- 使用
datetime.strptime方法将t2和t3解析为datetime对象。"%H:%M"是时间格式,表示小时和分钟。
处理跨天的情况:
if t2 < t1: time1 += timedelta(days=1) if t3 < t1: time2 += timedelta(days=1)if t2 < t1: time1 += timedelta(days=1) if t3 < t1: time2 += timedelta(days=1)
- 如果
t2小于t1,说明t2是第二天的时刻,因此将time1加上一天的时间差timedelta(days=1)。 - 如果
t3小于t1,说明t3是第二天的时刻,因此将time2加上一天的时间差timedelta(days=1)。
比较时间:
if time1 < time2: return "Yes" elif time1 >= time2: return "No"
- 比较
time1和time2。如果time1小于time2,则返回"Yes",表示超时;否则返回"No",表示未超时。
复杂度分析
-
时间复杂度:O(1)
- 所有操作都是常数时间复杂度。
-
空间复杂度:O(1)
- 所有操作都没有额外的空间开销。
思考总结
在编写代码时,需要注意的是时间格式的解析和跨天情况的判断,确保代码逻辑清晰且易于理解。在一开始解题的时候,我考虑到了要解决跨天的情况,但是如何处理跨天情况对我来说比较困难,通过在网络上查询后才学会用python处理跨天情况。通过合理使用 datetime 和 timedelta 模块,而且可以轻松解决这类时间相关的问题。总体而言,这道题目考察了对时间处理的基本能力,以及对边界条件的考虑。