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

185 阅读3分钟

问题描述

小C点了一个外卖,并且急切地等待着骑手的送达。她想知道她的外卖是否超时了。 已知小C在时刻 t1 点了外卖,外卖平台上显示的预计送达时间为 t2,而实际送达时间为 t3。需要判断外卖是否超时。如果外卖超时,则输出 "Yes";否则输出 "No"。 实际送达时间与预计送达时间在 2 小时之内。

思路分析

可以直接根据t1、t2、t3的值进行比较,例:当t3>t2时,即实际送达时间大于预计送达时间,则为超时。

  1. 跨天处理:

    • 如果 t2 小于 t1,说明预计送达时间 t2 在第二天。通过加上 1440(即 24小时 * 60分钟)来调整时间。
    • 同样,当 t3 在 t1 之前时,也调整为跨天的情况。
  2. 超时判断:

    • 最终,代码通过比较 t3_min 和 t2_min 来判断是否超时。如果 t3_min 大于 t2_min(实际送达晚于预计送达),则返回 "Yes",表示超时;否则返回 "No"。

易忽略点:需要处理跨天的情况

代码实现

def solution(t1: str, t2: str, t3: str) -> str:
    # write code here
    # 将时间字符串转换为总分钟数
    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)
    
    # 处理跨天的情况
    # 如果t2早于t1,说明跨天了,需要加24小时的分钟数
    if t2_min < t1_min:
        t2_min += 24 * 60 
    
    # 如果t3早于t1,说明跨天了,也说明跨天了,需要加24小时的分钟数
    if t3_min < t1_min:
        t3_min += 24 * 60
    
    # 判断是否超时
    return "Yes" if t3_min > t2_min else "No"
    # pass

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. 练习边界条件:

    • 经常练习各种边界条件,包括跨天、同一分钟的时间、时间为零等情况,以提高代码的健壮性。
  2. 自我测试:

    • 编写测试用例来验证代码的功能,包括正常情况和边缘情况,确保逻辑的正确性。

知识总结

  1. 时间表示与转换:

    • 常用的时间表示方法是 "HH:MM" 格式,将其转换为分钟数便于计算和比较。
    • 计算分钟数的公式为:总分钟数 = 小时 × 60 + 分钟。
  2. 跨天处理:

    • 在比较时间时,需要考虑跨天的情况。如果某个时间早于另一个时间,并且两者时间在 24 小时的范围内,则说明出现了跨天的情况。
    • 为了避免时间比较出错,可以通过加上 24 小时(1440 分钟)来调整次日的时间。

个人思考

这题做起来还算容易,时间相关的问题挺常见的,时间比较虽然看似简单,但其涉及到的一些逻辑判断和边界条件,对于培养逻辑思维有很大帮助。