刷题笔记:164 外卖超时判断 | 豆包MarsCode AI刷题

62 阅读2分钟

今天分享一道我个人认为非常有意思的题目与思路分析:是题库中的“外卖超时判断”。

问题描述

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

解题思路

  1. 解析时间:使用 LocalTimeDateTimeFormatter 解析输入的时间字符串 t1t2t3
  2. 计算时间差:计算预计送达时间 t2 和实际送达时间 t3 之间的分钟差。
  3. 判断超时:如果实际送达时间晚于预计送达时间,并且时间差在2小时之内,则判断为超时。

实现代码

以下是实现这一思路的Java代码:

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
public class Main {
    public static String solution(String t1, String t2, String t3) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
        LocalTime timeOrdered = LocalTime.parse(t1, formatter);
        LocalTime timeEstimated = LocalTime.parse(t2, formatter);
        LocalTime timeDelivered = LocalTime.parse(t3, formatter);
        // 计算预计送达时间和实际送达时间之间的差异
        long minutesDifference = ChronoUnit.MINUTES.between(timeEstimated, timeDelivered);
        // 如果实际送达时间晚于预计送达时间,则判断为超时
        if (minutesDifference > 0 && minutesDifference < 120) {
            return "Yes";
        } else {
            return "No";
        }
    }
    public static void main(String[] args) {
        System.out.println(solution("18:00", "19:05", "19:05").equals("No"));
        System.out.println(solution("23:00", "00:21", "00:23").equals("Yes"));
        System.out.println(solution("23:05", "00:05", "23:58").equals("No"));
    }
}

算法步骤

  1. 初始化时间格式:创建一个 DateTimeFormatter 对象来解析时间字符串。
  2. 解析时间:将字符串 t1t2t3 解析为 LocalTime 对象。
  3. 计算时间差:使用 ChronoUnit.MINUTES.between 方法计算 t2t3 之间的分钟差。
  4. 判断超时:根据时间差判断是否超时,并返回相应的字符串。

时间复杂度

  • 解析时间字符串的时间复杂度为 O(1)。
  • 计算时间差的时间复杂度为 O(1)。
  • 总的时间复杂度为 O(1)。

空间复杂度

  • 使用了常数级的额外空间,因此空间复杂度为 O(1)。

学习心得

通过实现这个外卖超时判断功能,我学习了如何使用Java的 LocalTimeDateTimeFormatter 类来处理时间相关的操作。这个问题的解决过程强调了时间解析、时间差计算以及条件判断的重要性。在未来的编程实践中,我将应用这些技巧来处理更多涉及时间操作和逻辑判断的场景。