刷题分享(四)小C外卖超时判断 | 豆包MarsCode AI刷题

110 阅读4分钟

题目:小C外卖超时判断

1、题目描述

小C点了一个外卖,并且急切地等待着骑手的送达。她想知道她的外卖是否超时了。

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

t3 在 t2 之后则认定为超时。

实际送达时间与预计送达时间在 2 小时之内。

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"

3、解题思路

(1)问题理解

由题可知,小C点外卖,外卖的点击时间、预计送达时间及实际送达时间由我们输入,我们需要判断外卖是否按规定时间送达(即外卖是否超时)。

在这个过程中,我们需要解决问题如何比较及计算问题,还有外卖送达时间是否为第二天的问题等等,需要考虑的东西必须体现到实际问题中。

(2)数据结构选择

在该题目中,我选择的数据结构是字符串和整型变量用来存储和处理信息: a. 字符串(String): 输入参数 t1t2 和 t3 是时间字符串,格式为 HH:MM。字符串用于存储和传递时间数据。

b. 整数(Integer):

通过 time_to_minutes 函数将时间字符串转换为整数(分钟数),以便进行比较和计算。整数类型用于存储时间的分钟表示。

c. 函数(Function) :

time_to_minutes 是一个辅助函数,用于将时间字符串转换为分钟数。函数作为一种数据结构,封装了转换逻辑,使得主函数 solution 更加清晰和模块化。

d. 映射(Map):

在 time_to_minutes 函数中,使用 map 函数将字符串分割后的结果映射为整数。map 函数在这里作为一种数据结构,用于转换数据类型。

(3)代码编写步骤

a. 分析问题,将复杂的时间形式HH:MM换为简单的分钟方式进行运算

在函数内部,使用 split(':') 方法将时间字符串分割为小时和分钟。

使用map函数将分割后的字符串转换为整数。

计算总分钟数,方法是将小时数乘以60然后加上分钟数。

b. 处理跨天问题

检查t2是否小于t1,如果是,则说明预计送达时间是跨天的,需要在t2_min上加上一天的分钟数(1440分钟)。 检查t3是否小于t1,如果是,则说明实际送达时间也是跨天的,需要在t3_min上加上一天的分钟数。

c. 判断外卖是否超时

比较t3_min和t2_min的值,如果t3_min大于t2_min,则表示外卖超时,返回"Yes"。

如果t3_min小于或等于t2_min,则表示外卖没有超时,返回"No"。

(4)代码详解

def solution(t1: str, t2: str, t3: str) -> str:
    #将时间转化为分钟方法
    def time_to_minutes(t):
        hours, minutes = map(int, t.split(':'))
        return hours * 60 + minutes
    # 转换所有时间为分钟
    t1_min = time_to_minutes(t1)
    t2_min = time_to_minutes(t2)
    t3_min = time_to_minutes(t3)

    # 处理跨天的情况,如果预计送达时间小于下单时间,说明跨天了
    if t2_min < t1_min:
        t2_min += 24 * 60  # 加24小时的分钟数

    # 如果实际送达时间小于下单时间,说明跨天了
    if t3_min < t1_min:
        t3_min += 24 * 60
    # 判断是否超时
    return "Yes" if t3_min > t2_min else "No"

4、试题经验总结

这道题目解答中首先定义了一个内部函数time_to_minutes,用于将时间从HH:MM格式转换为分钟数。然后,将所有给定的时间(下单时间t1、预计送达时间t2和实际送达时间t3)都转换为分钟数。

在解答中也有效处理了跨天的情况,如果预计送达时间t2的分钟数小于下单时间t1的分钟数,或者实际送达时间t3的分钟数小于下单时间t1的分钟数,它会在预计送达时间或实际送达时间的分钟数上加上24小时的分钟数,以处理跨天的情况。

最后,函数通过比较实际送达时间t3和预计送达时间t2的分钟数来判断是否超时。如果t3的分钟数大于t2的分钟数,则返回"Yes"表示超时;否则返回"No"表示没有超时。

因此,在这个题目中只有调用函数且不是循环调用的方式,以及一些简单的判断运算,所以总的时间复杂度为:O(1)

空间复杂度O(1)