青训营X豆包MarsCode技术训练营伴学笔记(5)|小C的外卖超时判断|豆包MarsCode AI刷题

152 阅读3分钟

一、题目解析

1. 问题描述

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

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

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

实际送达时间与预计送达时间在 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"

2. 题目解析

思路:
在本题中,我们需要比较三个时间 t1t2t3。其中,t1 是订单时间,t2 是预计送达时间,而 t3 是实际送达时间。如果 t3 超过 t2,则认为外卖超时,需要输出 "Yes";否则输出 "No"。此外,t2t3 可能是次日的时间,需要特别处理。

图解:
假设时间以一天 1440 分钟来表示,以此来做跨天判断和处理。例如:

  • t1 = "23:05", t2 = "00:05", t3 = "23:58"
  • 在该例子中,t2 实际发生在次日 0:05,我们将其转换为分钟数后加上 24 小时的分钟数(1440 分钟),使得它在同一时间线上。

3. 代码详解

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 是否跨天,如果 t2 比 t1 小,说明 t2 是次日
    if t2_minutes < t1_minutes:
        t2_minutes += 24 * 60  # 跨天处理,将 t2 加 24 小时

    # 判断 t3 是否跨天,如果 t3 比 t1 小,说明 t3 是次日
    if t3_minutes < t1_minutes:
        t3_minutes += 24 * 60  # 跨天处理,将 t3 加 24 小时

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

4. 时间和空间复杂度分析

  • 时间复杂度O(1)O(1),因为时间转换和比较的操作是固定次数的计算。

  • 空间复杂度O(1)O(1),只需常量级的空间存储转换后的时间值。

二、知识总结

新知识点:

  1. 时间处理技巧:通过将时间转换为分钟数,能简单地处理跨天问题。
  2. 跨天时间判断:尤其在涉及到次日的情况下,通过增加一天的总分钟数来处理,是简化逻辑的有效方式。

个人理解与学习建议:

建议入门同学多练习带有跨天处理的时间题,这类题目能帮助熟悉基本的时间处理和逻辑转换技巧。

三、学习计划

  1. 制定刷题计划:每天按主题进行题型分类,例如时间处理、字符串操作等。
  2. 错题复盘:对每次刷题的错题进行记录和分析,找出问题点并重新练习。
  3. 分阶段巩固:刷题时从简单到难,每天按计划进行一定量的复习和练习。

四、工具运用

AI 刷题功能与其他学习资源的结合

在学习和刷题过程中,可以结合 AI 工具与其他资源,如 豆包MarsCode AI等平台。

使用 AI 工具进行解题思路分析和代码验证,尤其在遇到复杂逻辑时,可以让 AI 提供参考答案和提示。此外,结合在线算法资源和错题本,有效分析和巩固常见错误的题型。