问题描述
小C点了一个外卖,并且急切地等待着骑手的送达。她想知道她的外卖是否超时了。 已知小C在时刻
t1点了外卖,外卖平台上显示的预计送达时间为t2,而实际送达时间为t3。需要判断外卖是否超时。如果外卖超时,则输出"Yes";否则输出"No"。 实际送达时间与预计送达时间在2小时之内。
思路分析
可以直接根据t1、t2、t3的值进行比较,例:当t3>t2时,即实际送达时间大于预计送达时间,则为超时。
-
跨天处理:
- 如果
t2小于t1,说明预计送达时间t2在第二天。通过加上 1440(即 24小时 * 60分钟)来调整时间。 - 同样,当
t3在t1之前时,也调整为跨天的情况。
- 如果
-
超时判断:
- 最终,代码通过比较
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')
学习建议
-
练习边界条件:
- 经常练习各种边界条件,包括跨天、同一分钟的时间、时间为零等情况,以提高代码的健壮性。
-
自我测试:
- 编写测试用例来验证代码的功能,包括正常情况和边缘情况,确保逻辑的正确性。
知识总结
-
时间表示与转换:
- 常用的时间表示方法是 "HH:MM" 格式,将其转换为分钟数便于计算和比较。
- 计算分钟数的公式为:总分钟数 = 小时 × 60 + 分钟。
-
跨天处理:
- 在比较时间时,需要考虑跨天的情况。如果某个时间早于另一个时间,并且两者时间在 24 小时的范围内,则说明出现了跨天的情况。
- 为了避免时间比较出错,可以通过加上 24 小时(1440 分钟)来调整次日的时间。
个人思考
这题做起来还算容易,时间相关的问题挺常见的,时间比较虽然看似简单,但其涉及到的一些逻辑判断和边界条件,对于培养逻辑思维有很大帮助。