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

82 阅读3分钟

小从的外卖超时判断

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

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

  • 实际送达时间与预计送达时间在 2 小时之内。 解题思路:本题关键所用的值就是预计送达时间t2和实际送达时间t3,我们要做的就是求这两个值的差值,然后比较大小,如果差值小于0,证明实际送达时间小于预计送达时间,没有超时,如果差值大于0并且小于两个消失,说明,实际送达时间超过了预计送达时间,但是不超过题目所说的两个小时,说明超时了,但是如果实际送达时间超过了预计送达时间的两个小时,只有可能是在第二天送达(因为题目说了,实际送达时间与预计送达时间在两个小时内),所以我们有以下思路,将时间统一转换为有多少分钟,这里提供两种方法: 1.使用split方法,将string类型的time转换为数组splits,splits[0]就是小时,splits[1]就是分钟,将两个都转换为之后,比较他们的差值即可


public class Main {
    public static String solution(String t1, String t2, String t3) {
        // 解析时间字符串
        int t2Minutes = parseTime(t2);
        int t3Minutes = parseTime(t3);

        int diff = t3Minutes - t2Minutes;
        //大于两个小时,没有超时
        if (diff > 120) {
            return "No";
        } else if (diff > 0) {
        //小于两小时,大于0的超时
            return "Yes";
        } else {
        //小于0没有超时
            return "No";
        }


    }

    // 将时间字符串转换为分钟数
    private static int parseTime(String time) {
        //将字符串形式的time解析出有多少分钟
        String[] parts = time.split(":");
        int hours = Integer.parseInt(parts[0]);
        int minutes = Integer.parseInt(parts[1]);
        //小时转换为分钟*60,然后加上分钟
        return hours * 60 + minutes;
    }

    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"));
    }
}

2.调用java提供的Duration.between(),里面的参数比较的是LocalTime类型,所以我们我们需要把string类型的格式转换为LocalTime类型,正好java里提供了LocalTime.parse()的可以转换为LocalTime类型的方法,但是同样的需要定义一个时间格式DateTiemFormatter,调用DateTimeFormatter.ofPattern("HH:mm"),就可以将我们的字符串类型的时间转换为LocalTime类型了。具体的代码展示如下:

import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

public class temp {
    public static String solution(String t1, String t2, String t3) {
        //定义时间格式
        DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm");

        // 调用LocalTime.parse()方法,提供时间格式,将时间字符串转换为 LocalTime 对象
        LocalTime estimatedDeliveryTime = LocalTime.parse(t2, timeFormatter);
        LocalTime actualDeliveryTime = LocalTime.parse(t3, timeFormatter);

        // 计算预计送达时间和实际送达时间的差值(以分钟为单位)
        long deliveryTimeDiff = Duration.between(estimatedDeliveryTime, actualDeliveryTime).toMinutes();
        System.out.println(deliveryTimeDiff);
        //大于两个小时,没有超时
        if (deliveryTimeDiff > 120) {
            return "No";
        } else if (deliveryTimeDiff > 0) {
        //小于两个小时,大于0超时
            return "Yes";
        } else {
        //小于0没有超时
            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"));
    }
}