【青训营笔记创作活动】161 小C的外卖超时判断

44 阅读2分钟

问题描述

小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 小时制,我们需要考虑时间跨天的情况。

核心步骤

  1. 将输入时间转换为统一的时间格式(分钟)。

  2. 比较实际送达时间 t3 与预计送达时间 t2。

  3. 考虑时间跨天的场景,具体做法是:

    • 如果 t3 的分钟数小于 t2 的分钟数,且差值小于 2 小时(120 分钟),则t3 是第二天的时间。
    • 否则,按照当天时间直接比较。
  4. 判断 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')

代码说明

  1. 时间转换函数 time_to_minutes

    • 接收时间字符串 hh:mm,将其转换为分钟数,便于后续计算和比较。
  2. 跨天处理

    • 如果预计时间 t2 的分钟数小于点单时间 t1,说明 t2 是第二天的时间,需加上 1440 分钟(一天的总分钟数)。
    • 同理,如果实际送达时间 t3小于点单时间 t1,也需加上 1440 分钟。
  3. 超时判断

    • 若实际送达时间 t3 超过预计送达时间 t2,输出 "Yes";否则输出 "No"