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

88 阅读5分钟

问题描述

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

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

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

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


测试样例

示例 1:

输入:t1 = "18:00", t2 = "19:05", t3 = "19:05"
输出:"No"

代码详解

def time_to_minutes(time: str) -> int:
"""将时间字符串转换为从午夜起的分钟数"""
hours, minutes = map(int, time.split(':'))
return hours * 60 + minutes

def solution(t1: str, t2: str, t3: str) -> str:
# 将时间字符串转换为分钟
t1_minutes = time_to_minutes(t1)
t2_minutes = time_to_minutes(t2)
t3_minutes = time_to_minutes(t3)

# 处理跨天的情况
if t2_minutes < t1_minutes:
    t2_minutes += 24 * 60  # 如果预计时间在t1的前面,增加一天的分钟数

if t3_minutes < t1_minutes:
    t3_minutes += 24 * 60  # 如果实际送达时间在t1的前面,增加一天的分钟数

# 判断是否超时
if t3_minutes > t2_minutes:
    return "Yes"
else:
    return "No"

if __name__ == '__main__':
print(solution("18:00", "19:05", "19:05") == 'No')  # 输出: True
print(solution("23:00", "00:21", "00:23") == 'Yes')  # 输出: True
print(solution("23:05", "00:05", "23:58") == 'No')   # 输出: True

问题描述

这段代码主要解决的是判断实际送达时间是否超过预计时间的问题,时间以字符串格式(如 "HH:MM")给出。通过先将时间字符串转换为从午夜起算的分钟数,以此来方便比较不同时间的先后顺序,同时考虑了跨天(比如预计时间是第二天凌晨,而起始时间是前一天晚上)这种特殊情况,最终根据实际送达时间和预计时间的先后关系返回相应的判断结果("Yes"表示超时,"No"表示未超时)。

知识总结

  1. 函数定义与调用:代码中定义了 time_to_minutes 函数用于将时间字符串转换为分钟数,以及 solution 函数来处理时间比较和超时判断逻辑,清晰展示了函数的参数传递、返回值处理以及函数之间的调用关系。
  2. 字符串处理与类型转换:在 time_to_minutes 函数里,使用 split 方法将时间字符串按照 : 分割为小时和分钟两部分,再通过 map 函数结合 int 类型转换,将分割后的字符串转换为整数,体现了字符串分割和类型转换的常见操作。
  3. 条件判断与逻辑处理:在 solution 函数中,通过多个 if 条件判断语句来处理跨天情况以及最终的超时判断。例如,判断预计时间和实际送达时间是否小于起始时间来决定是否要加上一天的分钟数(处理跨天情况),再比较实际送达时间和预计时间的大小来得出是否超时的结论,展现了根据不同条件执行不同逻辑的编程思路。

学习建议

  1. 深入理解时间处理逻辑:仔细思考时间在编程中的表示和运算方式,特别是跨天情况这种相对复杂的边界处理,可手动模拟几个不同时间的例子,按照代码逻辑去推导结果,加深对代码中时间处理逻辑的理解。
  2. 优化代码结构与效率:思考代码是否存在更简洁高效的实现方式,比如是否可以合并一些条件判断,或者优化时间转换和比较的算法,提升代码的简洁性和执行效率,培养代码优化意识。
  3. 拓展应用场景:尝试将此代码的时间处理逻辑应用到其他与时间相关的问题中,如日程安排系统中判断任务是否逾期、交通出行场景下判断是否错过车次等,通过实际应用加深对相关知识的掌握,并提高灵活运用能力。

学习计划

  1. 基础学习阶段(1 - 2 天) - 复习函数定义、字符串操作(分割、类型转换等)以及条件判断语句的基础语法知识,确保对代码中涉及的这些基础知识能熟练掌握。 - 详细分析 time_to_minutes 函数和 solution 函数的每一行代码,梳理清楚代码的执行流程和逻辑,对时间转换及比较的整体思路有清晰认识。
  2. 深入剖析阶段(1 - 2 天) - 针对跨天情况的处理逻辑,通过画图或者列举更多跨天时间示例的方式,深入理解代码是如何准确应对这种复杂情况的,总结处理边界情况的编程技巧。 - 对比自己设想的其他实现时间比较和超时判断的思路,分析代码中现有逻辑的优缺点,进一步加深对代码的理解,并拓宽编程思维。
  3. 实践巩固阶段(2 - 3 天) - 自己编写代码实现类似的时间相关功能,比如给定多个时间段,判断它们是否有重叠部分,要求同样要考虑跨天等复杂情况,在实践中巩固所学的时间处理、逻辑判断等知识。 - 在网上搜索一些与时间判断相关的练习题或者开源项目中的小模块,尝试用所学知识去解决问题或参与贡献,通过实际应用场景不断提升自己对这部分知识的运用能力和编程水平。