华为OD机试E卷-手机App防沉迷系统 JAVA

题目描述

智能手机方便了我们生活的同时,也侵占了我们不少的时间。“手机App防沉迷系统”能够让我们每天合理地规划手机App使用时间,在正确的时间做正确的事。

它的大概原理是这样的:

在一天24小时内,可以注册每个App的允许使用时段

一个时间段只能使用一个App

App有优先级,数值越高,优先级越高。注册使用时段时,如果高优先级的App时间和低优先级的时段有冲突,则系统会自动注销低优先级的时段,如果App的优先级相同,则后添加的App不能注册。

请编程实现,根据输入数据注册App,并根据输入的时间点,返回时间点使用的App名称,如果该时间点没有注册任何App,请返回字符串“NA”。

输入描述

第一行表示注册的App数量 N(N ≤ 100)

第二部分包括 N 行,每行表示一条App注册数据

最后一行输入一个时间点,程序即返回该时间点使用的App

2

App1 1 09:00 10:00

App2 2 11:00 11:30

09:30

数据说明如下:

N行注册数据以空格分隔,四项数依次表示:App名称、优先级、起始时间、结束时间

优先级1~5,数字越大,优先级越高

时间格式 HH:MM,小时和分钟都是两位,不足两位前面补0

起始时间需小于结束时间,否则注册不上

注册信息中的时间段包含起始时间点,不包含结束时间点

示例1

输入:
1
App1 1 09:00 10:00
09:30

输出:
App1

说明:
App1注册在9点到10点间,9点半可用的应用名是App1

示例2

输入:
2
App1 1 09:00 10:00
App2 2 09:10 09:30
09:20

输出:
App2

说明:
ApP1和App2的时段有冲突,App2优先级高,注册App2之后,App1自动注销,因此输出App2

示例3

输入:
2
App1 1 09:00 10:00
App2 2 09:10 09:30
09:50

输出:
NA

代码:

class AppInfo {
    String name;
    int priority;
    int startTime;
    int endTime;

    public AppInfo(String name, int priority, String startTime, String endTime) {
        this.name = name;
        this.priority = priority;
        this.startTime = timeToInt(startTime);
        this.endTime = timeToInt(endTime);
    }

    public static int timeToInt(String time) {
        String[] times = time.split(":");
        int hours = Integer.parseInt(times[0]);
        int minutes = Integer.parseInt(times[1]);
        return hours * 60 + minutes;
    }
}

public class OJTest4 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        in.nextLine();
        List<AppInfo> apps = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            String[] data = in.nextLine().split(" ");
            AppInfo appInfo = new AppInfo(data[0], Integer.parseInt(data[1]), data[2], data[3]);
            apps.add(appInfo);
        }
        String timePoint = in.nextLine();
        int time = AppInfo.timeToInt(timePoint);
        List<AppInfo> registereds = new ArrayList<>();
        for (AppInfo app : apps) {
            if (app.startTime >= app.endTime) {
                continue;
            }
            //如果App的优先级相同,则后添加的App不能注册
            if (registereds.stream().anyMatch(a -> a.priority == app.priority)) {
                continue;
            }
            //如果高优先级的App时间和低优先级的时间段有冲突,则系统会自动注销低优先级的时段
            if (registereds.stream().anyMatch(a -> a.startTime < app.endTime && app.startTime < a.endTime)) {
                if (registereds.stream().anyMatch(a -> a.priority < app.priority)) {
                    registereds.removeIf(/*a -> a.name.equals(app.name) &&*/ a -> a.startTime < app.endTime && app.startTime < a.endTime);
                    registereds.add(app);
                }
            } else {
                registereds.add(app);
            }
        }

        AppInfo found = registereds.stream().filter(a -> a.startTime <= time && time < a.endTime).findFirst().orElse(null);
        if (found == null) {
            System.out.println("NA");
        } else {
            System.out.println(found.name);
        }
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 20:19
真是乐了:模版不太好 而且字太密了项目说的太细碎
点赞 评论 收藏
分享
YZBPXX:国科的佬都挂了 让我们这些四非怎么活呀
点赞 评论 收藏
分享
11-06 09:58
西京学院 Java
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务