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

136 阅读3分钟
def solution(t1: str, t2: str, t3: str) -> str:
    # 将时间字符串转换为分钟数
    def time_to_minutes(t: str) -> int:
        hours, minutes = map(int, t.split(':'))
        return hours * 60 + minutes
    
    # 转换时间
    t2_minutes = time_to_minutes(t2)
    t3_minutes = time_to_minutes(t3)
    
    # 考虑跨天情况
    if t3_minutes < t2_minutes:  # 如果实际送达时间跨天
        t3_minutes += 24 * 60

    # 比较实际送达时间和预计送达时间
    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')  # 未超时

当然可以。以下是对你提供的刷题攻略的文字扩充,以达到800字的要求:

刷题攻略详解

在解决涉及时间计算的问题时,一个有效的方法是将时间转换为分钟数,这样可以简化比较和计算的过程。以下是详细的步骤和注意事项:

  1. 明确时间逻辑

    • 将时间转换为分钟数是处理时间问题的关键。通过将小时和分钟转换为从午夜开始的总分钟数,我们可以轻松地比较两个时间点。
    • 如果实际送达时间 t3 晚于预计送达时间 t2,则判断为超时。这是我们的主要判断逻辑。
  2. 边界条件

    • 时间格式通常为 "HH:MM",我们需要确保能够正确解析这种格式。
    • 跨天的时间计算需要特别注意。例如,从 "23:00" 到 "00:21",虽然看起来 t3 小于 t2,但实际上 t3 是在第二天,因此我们需要将 t3 的分钟数增加 24 小时的分钟值(即1440分钟)。
    • 由于题目中提到实际送达时间和预计送达时间在2小时内,我们不需要处理跨度较大的跨天情况,这简化了问题。
  3. 代码简化

    • 在编写代码时,我们应该去掉不必要的逻辑分支和冗余代码,使代码更加简洁和高效。
    • 通过减少条件判断和循环,我们可以提高代码的运行效率。
  4. 解析代码逻辑

    • 将输入的时间 t2t3 转化为从午夜开始的分钟数,这样可以方便地进行比较。
    • 对于跨天情况,我们需要手动调整 t3 的分钟数,增加24小时的分钟值,以确保时间的连续性。
  5. 判断是否超时

    • 如果 t3 的分钟数大于 t2 的分钟数,则判断为超时,输出 "Yes"。
    • 否则,输出 "No"。
  6. 测试用例覆盖

    • 我们需要确保测试用例能够覆盖所有可能的情况,包括普通情况(无跨天)、跨天情况,以及预计送达时间和实际送达时间相同的情况。
    • 通过全面的测试,我们可以确保我们的算法在各种情况下都能正确运行。

可能的陷阱

  1. 时间格式不合法

    • 在实际应用中,我们需要对输入的时间格式进行校验,以确保它们是合法的。但在这个问题中,我们假设输入是合法的,因此不需要进行额外的格式校验。
  2. 时间跨度超出2小时

    • 根据题目的假设,我们不需要处理时间跨度超出2小时的情况。这简化了问题,因为我们不需要考虑跨越多天的时间计算。
  3. 忘记处理跨天

    • 在处理时间问题时,跨天是一个常见的陷阱。如果忘记处理跨天,可能会导致错误的结果。因此,我们需要特别注意跨天的时间转换。