AI刷题 161.小C的外卖超时判断 题解 | 豆包MarsCode AI刷题

37 阅读4分钟

问题描述

小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. 算法步骤

  1. 解析时间

    • 使用 datetime.strptime 方法将字符串格式的时间 t1t2 和 t3 转换为 datetime 对象。
  2. 处理跨天的情况

    • 如果 t2 或 t3 小于 t1,说明它们是第二天的时刻。在这种情况下,我们需要将 t2 或 t3 加上一天的时间差。
  3. 比较时间

    • 比较 t2 和 t3 的时间对象。如果 t2 小于 t3,则返回 "Yes",表示超时;否则返回 "No",表示未超时。

4. 具体步骤

  1. 解析时间

    • 使用 datetime.strptime(t2, "%H:%M") 和 datetime.strptime(t3, "%H:%M") 将 t2 和 t3 转换为 datetime 对象。
  2. 处理跨天的情况

    • 如果 t2 < t1,则 time1 += timedelta(days=1)
    • 如果 t3 < t1,则 time2 += timedelta(days=1)
  3. 比较时间

    • 如果 time1 < time2,则返回 "Yes"
    • 否则返回 "No"

解题代码

微信图片_20241130213231.png

代码详解

导入模块

from datetime import datetime, timedelta

  • 导入 datetime 和 timedelta 模块,用于处理时间和时间差。

定义 solution 函数

def solution(t1: str, t2: str, t3: str) -> str:

  • 定义一个名为 solution 的函数,接受三个字符串参数 t1t2 和 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 模块,而且可以轻松解决这类时间相关的问题。总体而言,这道题目考察了对时间处理的基本能力,以及对边界条件的考虑。