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

34 阅读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"

这个问题要求我们判断实际送达时间 t3 是否超过了预计送达时间 t2,超时的话输出 "Yes",否则输出 "No"。而且预计送达时间和实际送达时间之间的差异不超过2小时。

解题思路

  • 我们需要将时间从字符串格式(例如 "18:00")转化为时间戳或者分钟数,便于比较。
  • 将每个时间点 t1t2, 和 t3 转换为一天中的分钟数,这样可以方便地进行比较。
  • 比较 t3 和 t2,如果 t3 晚于 t2,就认为是超时,返回 "Yes",否则返回 "No"

具体步骤

  1. 将时间字符串转化为分钟数:例如 "18:00" 转化为 18 * 60 + 0 = 1080 分钟。
  2. 判断时间差:计算 t2 和 t3 之间的分钟差,若 t3 晚于 t2,即时间差大于 0 分钟且不超过 120 分钟(2小时),则输出 "Yes"。
  3. 否则输出 "No"。

代码实现

def solution(t1: str, t2: str, t3: str) -> str:
    def time_to_minutes(t: str) -> int:
        hours, minutes = map(int, t.split(":"))
        return hours * 60 + minutes
    
    # 将时间 t2 和 t3 转换为分钟数
    t2_minutes = time_to_minutes(t2)
    t3_minutes = time_to_minutes(t3)
    
    # 如果 t3 比 t2 晚,并且晚的时间不超过2小时,则为超时
    if t3_minutes > t2_minutes and t3_minutes - t2_minutes <= 120:
        return "Yes"
    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 函数:这个函数将时间字符串(如 "18:00")转换为从00:00开始的分钟数。我们通过 split(":") 将字符串分割为小时和分钟,然后转换为整数并计算总分钟数。
  2. 时间差判断:我们将 t2t3 转换为分钟数后,计算它们的差。如果 t3t2 之后且时间差不超过120分钟(即2小时),那么认为是超时,返回 "Yes",否则返回 "No"

示例

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

    • t2 转换为 19:05 -> 1145 分钟
    • t3 转换为 19:05 -> 1145 分钟
    • t3 等于 t2,没有超时,输出 "No"
  2. 输入: t1 = "23:00", t2 = "00:21", t3 = "00:23"

    • t2 转换为 00:21 -> 21 分钟
    • t3 转换为 00:23 -> 23 分钟
    • t3 晚于 t2,且时间差为 2 分钟,未超过2小时,输出 "Yes"
  3. 输入: t1 = "23:05", t2 = "00:05", t3 = "23:58"

    • t2 转换为 00:05 -> 5 分钟
    • t3 转换为 23:58 -> 1438 分钟
    • t3 在 t2 之前,不是超时,输出 "No"

复杂度分析

  • 时间复杂度:O(1),因为我们只需要进行几次字符串解析和简单的数学计算。
  • 空间复杂度:O(1),只需要常数级别的空间来存储几个整数。

这样就能够准确判断外卖是否超时了。