题目:小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):
输入参数 t1、t2 和 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)