问题描述
小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"
思路解析
这道题需要判断实际送达时间 t3是否晚于预计送达时间 t2。题目中的时间表示是 24 小时制,我们需要考虑时间跨天的情况。
核心步骤
-
将输入时间转换为统一的时间格式(分钟)。
-
比较实际送达时间 t3 与预计送达时间 t2。
-
考虑时间跨天的场景,具体做法是:
- 如果 t3 的分钟数小于 t2 的分钟数,且差值小于 2 小时(120 分钟),则t3 是第二天的时间。
- 否则,按照当天时间直接比较。
-
判断 t3 是否大于 t2,如果是则输出 "Yes",否则输出 "No"。
def solution(t1: str, t2: str, t3: str) -> str:
# 将时间转换为分钟数
def time_to_minutes(time):
hours, minutes = map(int, time.split(":"))
return hours * 60 + minutes
# 转换时间为分钟
t1_minutes = time_to_minutes(t1)
t2_minutes = time_to_minutes(t2)
t3_minutes = time_to_minutes(t3)
# 处理跨天情况
if t2_minutes < t1_minutes: # t2 跨天
t2_minutes += 1440
if t3_minutes < t1_minutes: # t3 跨天
t3_minutes += 1440
# 判断是否超时
return "Yes" if t3_minutes > t2_minutes else "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:- 接收时间字符串
hh:mm,将其转换为分钟数,便于后续计算和比较。
- 接收时间字符串
-
跨天处理:
- 如果预计时间 t2 的分钟数小于点单时间 t1,说明 t2 是第二天的时间,需加上 1440 分钟(一天的总分钟数)。
- 同理,如果实际送达时间 t3小于点单时间 t1,也需加上 1440 分钟。
-
超时判断:
- 若实际送达时间 t3 超过预计送达时间 t2,输出
"Yes";否则输出"No"。
- 若实际送达时间 t3 超过预计送达时间 t2,输出