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

114 阅读3分钟

题解

题目描述

小C点了一个外卖并急切等待送达,想知道外卖是否超时。已知小C在时刻 t1 点了外卖,预计送达时间为 t2,实际送达时间为 t3,需要判断外卖是否超时。如果实际送达时间 t3 在预计送达时间 t2 之后且不超过 2 小时,则认定为超时。

思路分析

为了判断外卖是否超时,我们首先需要将时间转化为统一的度量单位——分钟数。具体来说,我们将 t1t2t3 转换为从当天零点开始的分钟数,然后进行比较。

  1. 时间转换:t2t3 转换为从当天 00:00 开始的分钟数,便于进行时间差的计算。
  2. 判断超时: 如果 t3t2 之后,且 t3t2 之间的差值小于 2 小时(即 120 分钟),那么就认为外卖超时。

代码解析

TWO_HOURS = 2 * 60  # 2小时对应的分钟数

def time_to_minutes(time):
    """ 将时间转换为从当天 00:00 开始的分钟数 """
    hours, minutes = map(int, time.split(":"))  # 将时间字符串拆分为小时和分钟
    return hours * 60 + minutes  # 将小时和分钟转换为分钟数

def solution(t1: str, t2: str, t3: str) -> str:
    # 将时间转为分钟数
    t2_minutes = time_to_minutes(t2)  # 预计送达时间
    t3_minutes = time_to_minutes(t3)  # 实际送达时间
    
    # 判断超时
    if t3_minutes > t2_minutes and t3_minutes - t2_minutes < TWO_HOURS:
        return "Yes"  # 超过预计时间且在2小时内,超时
    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')  # 实际送达时间在预计时间前,不超时

代码解析:

  1. 时间转换函数 (time_to_minutes):

    • 将时间字符串 HH:MM 解析为小时和分钟。
    • 通过 hours * 60 + minutes 将其转化为从当天 00:00 开始的分钟数。这样可以避免跨天时间带来的复杂性。
  2. 主函数 (solution):

    • 先将预计送达时间 t2 和实际送达时间 t3 转换为分钟数。
    • 比较 t3 是否大于 t2,即是否超时,并判断超时的时间差是否小于 2 小时(120 分钟)。如果满足条件,则返回 "Yes",表示超时;否则返回 "No"。

测试样例解析

  1. 样例 1: 输入:t1 = "18:00", t2 = "19:05", t3 = "19:05"

    • t2t3 均为 19:05,因此没有超时,输出 "No"。
  2. 样例 2: 输入:t1 = "23:00", t2 = "00:21", t3 = "00:23"

    • t3 是 00:23,超出了预计送达时间 00:21,且差值小于 2 小时,输出 "Yes"。
  3. 样例 3: 输入:t1 = "23:05", t2 = "00:05", t3 = "23:58"

    • t3 是 23:58,虽然接近 00:05,但在预计时间之前,输出 "No"。

总结

  • 时间转换是解决这个问题的关键步骤,通过将时间转化为分钟数来统一比较。
  • 通过计算 t3t2 之间的差值,可以判断外卖是否超时。
  • 处理了跨天问题,只需要将时间转化为分钟数后即可避免跨天导致的麻烦。