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

117 阅读4分钟

外卖超时判断:基于时间的计算与判定

在这篇文章中,我们将解析一个关于外卖超时判断的问题。问题的目标是:根据小C点餐后的预计送达时间和实际送达时间,判断外卖是否超时,并输出相应的结果。

问题描述

小C在时刻 t1 点了外卖,外卖平台上显示的预计送达时间为 t2,而实际送达时间为 t3。需要判断实际送达时间是否超过了预计送达时间。如果超时,则输出 "Yes";否则输出 "No"

具体要求:

  • 超时判定条件:如果 t3t2 之后,则认为外卖超时。
  • 时间范围:预计送达时间与实际送达时间的差距在 2 小时之内。

思路解析

1. 时间的表示与比较

为了判断是否超时,我们需要理解时间的比较。我们通常使用“时:分”格式表示时间。例如,t2t3 分别是预计送达和实际送达的时间。要判断 t3 是否超出 t2,首先需要将时间统一转化为可以直接比较的形式。最常见的做法是将时间转换为分钟数。

2. 时间转换

假设 t2t3 都以“时:分”的格式给出,我们可以按照以下步骤将其转化为以分钟为单位的时间:

  • t2t3 中的小时部分乘以 60,得到分钟数;
  • 再加上分钟部分,得到最终的分钟数。

例如:

  • 时间 12:30 可以转化为 12 * 60 + 30 = 750 分钟。
  • 时间 14:00 可以转化为 14 * 60 + 0 = 840 分钟。

3. 超时判定

  • 如果 t3 转化后的分钟数大于 t2 转化后的分钟数,且它们的差值不超过 120 分钟(即 2 小时),则认为超时,输出 "Yes"
  • 否则输出 "No"

4. 实现步骤

  1. t2t3 转化为分钟数;
  2. 计算它们的差值;
  3. 判断差值是否大于 0 且不超过 120 分钟。

代码实现

def check_delivery_time(t2, t3):
    # 将时间字符串转化为分钟数
    def time_to_minutes(time):
        hours, minutes = map(int, time.split(':'))
        return hours * 60 + minutes
    
    # 转化为分钟数
    t2_minutes = time_to_minutes(t2)
    t3_minutes = time_to_minutes(t3)
    
    # 判断是否超时
    if t3_minutes > t2_minutes and t3_minutes - t2_minutes <= 120:
        return "Yes"
    else:
        return "No"

# 示例
t2 = "12:30"
t3 = "13:45"
print(check_delivery_time(t2, t3))  # 输出:"Yes"

t2 = "12:30"
t3 = "14:31"
print(check_delivery_time(t2, t3))  # 输出:"No"

代码详解

  1. time_to_minutes 函数

    • 该函数将时间字符串(如 12:30)转化为分钟数。首先通过 split(':') 方法分割出小时和分钟部分,然后将小时乘以 60 加上分钟,得到总分钟数。
  2. 时间比较

    • 我们首先通过 time_to_minutest2t3 转化为分钟数,存储在 t2_minutest3_minutes 中。
    • 然后,通过判断 t3_minutes > t2_minutest3_minutes - t2_minutes <= 120 来决定是否超时。
  3. 输出结果

    • 如果超时,返回 "Yes";否则返回 "No"

时间复杂度

  • 时间复杂度:O(1),因为我们只进行了常数次的时间计算与比较操作。

示例

输入:

t2 = "12:30"
t3 = "13:45"

输出:

"Yes"

解释:

  • t2 = "12:30",即 12:30,转化为 12 * 60 + 30 = 750 分钟。
  • t3 = "13:45",即 13:45,转化为 13 * 60 + 45 = 825 分钟。
  • 由于 825 - 750 = 75 分钟,符合超时条件(超过 t2 且差距小于等于 2 小时),输出 "Yes"

输入:

t2 = "12:30"
t3 = "14:31"

输出:

"No"

解释:

  • t2 = "12:30",转化为 750 分钟。
  • t3 = "14:31",转化为 871 分钟。
  • 由于 871 - 750 = 121 分钟,超出了 120 分钟的限制,输出 "No"

总结

通过将时间转化为统一的分钟数并进行简单的比较,我们可以轻松地判断外卖是否超时。这种方法不仅简单直观,而且时间复杂度为常数级,效率非常高。对于任何类似的时间比较问题,转换为分钟数进行统一计算和比较是一种非常有效的技术方案。