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

1 阅读4分钟

题目解析与学习总结:外卖超时判断问题

一、题目解析

本题涉及时间字符串的处理,要求判断外卖是否超时,思路清晰且逻辑较为简单,但需要注意跨天处理和时间比较的细节。具体题目描述如下:

小C在某时刻 t1t1 点了外卖,外卖平台显示预计送达时间为 t2t2,实际送达时间为 t3t3。如果实际送达时间 t3t3 晚于预计送达时间 t2t2,则判定超时,输出 "Yes";否则输出 "No"。

二、解题思路

  1. 时间字符串转换为分钟数

    • 采用函数 time_to_minutes,将形如 hh:mm 的时间字符串转换为分钟数,方便进行数值比较。例如 18:00 转换为 18×60+0=108018 \times 60 + 0 = 1080 分钟。
  2. 跨天处理

    • 如果 t2t2 或 t3t3 比 t1t1 小,说明时间跨越了一天,需要在其基础上加 1440 分钟(24 小时),确保时间比较逻辑正确。
  3. 时间比较

    • 转换完成后,直接比较 t3t3 是否大于 t2t2。若超时则返回 "Yes",否则返回 "No"。

三、代码实现与详解

def solution(t1: str, t2: str, t3: str) -> str:
    # 时间字符串转为分钟数
    def time_to_minutes(time: str) -> int:
        hours, minutes = map(int, time.split(":"))
        return hours * 60 + minutes

    # 转换时间为分钟数
    t1_minutes = time_to_minutes(t1)
    t2_minutes = time_to_minutes(t2)
    t3_minutes = time_to_minutes(t3)

    # 跨天处理:如果 t2 或 t3 比 t1 小,说明跨天
    if t2_minutes < t1_minutes:
        t2_minutes += 1440
    if t3_minutes < t1_minutes:
        t3_minutes += 1440

    # 比较 t3 和 t2 的分钟值
    return "Yes" if t3_minutes > t2_minutes else "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 函数:

    • 时间字符串通过 split 分割为小时和分钟,按公式计算总分钟数。
  2. 跨天处理:

    • 判断 t2t2 和 t3t3 是否比 t1t1 小,若是,则说明时间跨天,需加 1440 分钟。
  3. 超时判断:

    • 通过 t3t3 和 t2t2 的大小直接得出结论。

四、知识总结

  1. 时间字符串处理

    • 将时间转化为分钟数是一种常见技巧,可在时间比较、计算时避免复杂的逻辑。
    • 跨天问题需特别注意,关键是理解次日的时间如何表达并进行修正。
  2. 跨天逻辑

    • 如果某时间点比基准时间点小,则说明发生了跨天,例如 23:0023:00 到 00:0500:05。
  3. 模块化思维

    • 将常见逻辑独立封装为函数,如 time_to_minutes,提高代码复用性和可读性。

五、学习建议与计划

高效刷题方法:

  1. 分解问题:将问题分成若干子问题(如时间转换、跨天处理),逐一解决。
  2. 错误分析:对于错误用例,明确问题所在(如时间跨天处理遗漏),并优化代码逻辑。
  3. 总结规律:通过类似问题的总结,提炼通用解题思路(如时间转换的技巧)。

利用错题库:

  • 每次刷题后,将未通过的用例和错误原因记录,定期复盘。
  • 通过 MarsCode AI 的智能反馈功能,分析错误的核心原因,针对性复习。

工具与资源结合:

  • MarsCode AI + LeetCode:结合题目解析与代码运行,练习不同题型。
  • 时间管理与计划:每日定量刷题(如 3-5 道),每周固定总结所学知识点。

六、总结与建议

通过 MarsCode AI 刷题工具,可以将时间字符串处理类问题中的复杂逻辑逐一分解。针对入门同学,建议从简单问题入手,注重思路梳理和代码优化,不断提升算法思维。同时,善用工具如错题反馈与 AI 解析,结合规律总结和针对性训练,逐步提升编程能力和解题水平。