华为OD机试真题---手机App防沉迷系统
题目概述
智能手机在方便我们生活的同时,也侵占了大量时间。手机App防沉迷系统旨在帮助用户合理规划手机App使用时间,确保在正确的时间做正确的事。系统的主要功能包括:
- 在一天24小时内,可注册每个App的允许使用时段。
- 一个时段只能使用一个App,即不能同时注册多个App在同一时间段内使用。
- App有优先级,数值越高,优先级越高。注册时,如果高优先级的App时间和低优先级的时段有冲突,系统会自动注销低优先级的时段;如果App的优先级相同,则后添加的App不能注册。
编程实现
编程实现时,需要处理输入数据,包括App的数量、每个App的注册信息(名称、优先级、起始时间、结束时间),并根据输入的时间点返回该时间点可用的App名称。如果时间点没有注册任何App,则返回“NA”。
运行示例解析
以下是一个具体的运行示例及其解析:
输入示例
2
App1 1 09:00 10:00
App2 2 09:10 09:30
09:20
解析过程
-
读取输入
- 第一行表示要注册的App数量,这里是2。
- 接下来两行是App的注册信息:
- App1,优先级1,注册时段09:00-10:00。
- App2,优先级2,注册时段09:10-09:30。
- 最后一行是查询时间点,这里是09:20。
-
处理注册信息
- 根据注册信息,将App及其相关信息存储起来,并检查时间冲突和优先级。
- 在这个例子中,App1和App2的注册时段有冲突(09:10-09:30重叠)。由于App2的优先级(2)高于App1(1),系统会注销App1在该时间段的注册,只保留App2的注册信息。
-
查询时间点
- 查询时间为09:20,根据已注册的App信息,此时可用的App是App2。
输出结果
App2
编程注意事项
- 输入数据的格式和范围需要严格检查,确保符合题目要求。
- 时间处理时,需要注意起始时间和结束时间的比较,以及注册信息中的时间段是否包含起始时间点但不包含结束时间点。
- 优先级处理时,需要确保高优先级的App能够覆盖低优先级的App的注册信息。
- 如果存在多个App在同一时间点冲突且优先级相同的情况,需要按照题目要求处理(如后添加的App不能注册)。
代码实现
import java.util.*;public class AppScheduler {private final Map<String, Integer> appPriorityMap;private final Map<Integer, String> timeSlotMap;public AppScheduler() {appPriorityMap = new HashMap<>();timeSlotMap = new TreeMap<>();}/*** 注册应用程序的优先级和运行时间* * @param appName 应用程序的名称* @param priority 应用程序的优先级,数值越小优先级越高* @param startTime 应用程序开始运行的时间(格式为"HH:mm")* @param endTime 应用程序结束运行的时间(格式为"HH:mm")*/public void registerApp(String appName, int priority, String startTime, String endTime) {// 将开始时间和结束时间转换为小时数int startHour = parseTime(startTime);int endHour = parseTime(endTime);// 如果应用程序还不在优先级映射中,直接添加if (!appPriorityMap.containsKey(appName)) {appPriorityMap.put(appName, priority);} else {// 如果应用程序已经在优先级映射中,只有当新优先级更高时才更新int currentPriority = appPriorityMap.get(appName);if (priority < currentPriority) {return;}appPriorityMap.put(appName, priority);}// 遍历应用程序的运行时间,尝试在时间槽映射中注册for (int i = startHour; i < endHour; i++) {// 如果时间槽已经被占用,只有当新优先级更高时才替换if (timeSlotMap.containsKey(i)) {String existingAppName = timeSlotMap.get(i);int existingPriority = appPriorityMap.get(existingAppName);if (priority > existingPriority) {timeSlotMap.put(i, appName);}} else {// 如果时间槽未被占用,直接注册timeSlotMap.put(i, appName);}}}/*** 根据查询时间获取应用程序名称* 此方法用于根据给定的查询时间确定并返回对应的应用程序名称如果在给定的时间段内找不到确切的应用程序,则返回"NA"* * @param queryTime 查询时间,将被解析以确定对应的时间段* @return 在指定时间段内运行的应用程序的名称,如果找不到则返回"NA"*/public String getAppAtTime(String queryTime) {// 解析查询时间,返回对应的小时数int queryHour = parseTime(queryTime);// 根据查询时间对应的小时数,在时间槽映射中查找对应的应用程序名称,如果找不到,则默认返回"NA"return timeSlotMap.getOrDefault(queryHour, "NA");}/*** 解析时间字符串为分钟数* * @param time 时间字符串,格式为"hh:mm",其中hh为小时数,mm为分钟数* @return 从午夜开始到指定时间的总分钟数*/private int parseTime(String time) {// 将时间字符串按":"分割,得到小时和分钟部分String[] parts = time.split(":");// 计算总分钟数,小时数乘以60加上分钟数return Integer.parseInt(parts[0]) * 60 + Integer.parseInt(parts[1]);}/*** 主函数,用于处理应用程序调度器的输入和输出* @param args 命令行参数*/public static void main(String[] args) {// 创建Scanner对象,读取系统输入Scanner scanner = new Scanner(System.in);// 读取并存储输入的程序数量int numApps = scanner.nextInt();// 消费掉输入中的换行符,准备读取下一行数据scanner.nextLine();// 创建应用程序调度器实例AppScheduler scheduler = new AppScheduler();// 循环读取每个应用程序的注册信息,并注册到调度器中for (int i = 0; i < numApps; i++) {// 读取应用程序名称、优先级、开始时间和结束时间String appName = scanner.next();int priority = scanner.nextInt();String startTime = scanner.next();String endTime = scanner.next();// 在调度器中注册应用程序scheduler.registerApp(appName, priority, startTime, endTime);}// 读取查询的时间点String queryTime = scanner.next();// 输出在查询时间点正在运行的应用程序信息System.out.println(scheduler.getAppAtTime(queryTime));}}
解析步骤
1、定义数据结构:
- appPriorityMap:存储 App 名称和优先级。
- timeSlotMap:存储时间段和对应的 App 名称。
2、处理输入数据:
- 读取输入并解析。
3、注册 App:
- 根据优先级和时间冲突处理注册信息。
4、查询 App:
- 根据时间点查询可用的 App 名称。
示例运行
输入示例
2
App1 1 09:00 10:00
App2 2 09:10 09:30
09:20
输出结果
App2
相关文章:
华为OD机试真题---手机App防沉迷系统
题目概述 智能手机在方便我们生活的同时,也侵占了大量时间。手机App防沉迷系统旨在帮助用户合理规划手机App使用时间,确保在正确的时间做正确的事。系统的主要功能包括: 在一天24小时内,可注册每个App的允许使用时段。一个时段只…...

物流货运托运发货单二联三联打印软件定制 佳易王物流单管理系统操作教程
一、前言 物流货运托运发货单二联三联打印软件定制 佳易王物流单管理系统操作教程 1、软件为绿色免安装版,解压即可使用,已经内置数据库,不需再安装。 2、软件下载可以到本文章最后点击官网卡片下。 二、软件程序教程 1、如图,…...
代码随想录算法训练营| 找树左下角的值 、 路径总和 、 从中序与后序遍历序列构造二叉树
找树左下角的值 题目 参考文章 思路:这里寻找最左下角的值,其实用前中后序都是可以的,只要保证第一遍历的是左边开始就可以。设置Deep记录遍历的最大深度,deep记录当前深度。当遇到叶子节点时而且当前深度比最大深度还大则更换最…...

【开源免费】基于SpringBoot+Vue.JS服装销售平台(JAVA毕业设计)
博主说明:本文项目编号 T 054 ,文末自助获取源码 \color{red}{T054,文末自助获取源码} T054,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…...

人工智能与自然语言处理发展史
前言 在科技的浪潮中,人工智能 (AI) 作为一股不可阻挡的力量,持续推动着社会与科技的进步。本博客旨在深入剖析人工智能及其核心领域——神经网络、自然语言处理、统计语言模型、以及大规模语言模型——的演进历程,以专业的视角展现这一领域…...

0基础跟德姆(dom)一起学AI 机器学习01-机器学习概述
【知道】人工智能 - Artificial Intelligence 人工智能 - AI is the field that studies the synthesis and analysis of computational agents that act intelligently - AI is to use computers to analog and instead of human brain - 释义 - 仿智; 像人…...

yakit使用教程(一,下载并进行基础配置)
一,yakit简介 YAKIT(Yet Another Knife for IT Security)是一款网络安全单兵工具,专为个人渗透测试员和安全研究人员设计。它整合了一系列实用的安全工具,例如密码破解工具、网络扫描器、漏洞利用工具等,帮…...

计算机毕业设计电影票购买网站 在线选票选座 场次订票统计 新闻留言搜索/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序
系统功能 在线选票选座:用户可浏览电影场次,选择座位并生成订单。场次订票统计:系统实时统计各场次订票情况,便于影院管理。新闻发布与留言:发布最新电影资讯,用户可留言互动。搜索功能&a…...
DES、3DES 算法及其应用与安全性分析
一、引言 1.1 研究背景 在当今数字化时代,信息安全至关重要。对称加密算法作为信息安全领域的重要组成部分,发挥着关键作用。DES(Data Encryption Standard)作为早期的对称加密算法,由美国国家标准局于 1977 年采纳为数据加密标准。随着计算机运算能力的不断增强,DES 算…...

TypeScript介绍和安装
TypeScript介绍 TypeScript是由微软开发的一种编程语言,它在JavaScript的基础上增加了静态类型检查。静态类型允许开发者在编写代码时指定变量和函数的类型,这样可以在编译时捕获潜在的错误,而不是等到运行时才发现问题。比如,你…...
NetworkPolicy访问控制
NetworkPolicy是Kubernetes中一种用于控制Pod之间以及Pod与外部网络之间流量的资源对象。它可以帮助你在 IP 地址或端口层面(OSI 第 3 层或第 4 层)控制网络流量。NetworkPolicy 资源使用标签选择 Pod,并定义选定 Pod 所允许的通信规则。它可…...
C++面向对象基础
目录 一.作用域限定符 1.名字空间 2.类内声明,类外定义 二.this指针 1 概念 2.功能 2.1 类内调用成员 2.2 区分重名的成员变量和局部变量 2.3链式调用 三.stastic关键字 1.静态局部变量 2 静态成员变量 3 静态成员函数 4 单例设计模式(了解…...

遥感图像变换检测实践上手(TensorRT+UNet)
目录 简介 分析PyTorch示例 onnx模型转engine 编写TensorRT推理代码 main.cpp测试代码 小结 简介 这里通过TensorRTUNet,在Linux下实现对遥感图像的变化检测,示例如下: 可以先拉去代码:RemoteChangeDetection 分析PyTorch示…...
Transformers 引擎,vLLM 引擎,Llama.cpp 引擎,SGLang 引擎,MLX 引擎
1. Transformers 引擎 开发者:Hugging Face主要功能:Transformers 库提供了对多种预训练语言模型的支持,包括 BERT、GPT、T5 等。用户可以轻松加载模型进行微调或推理。特性: 多任务支持:支持文本生成、文本分类、问答…...

牛顿迭代法求解x 的平方根
牛顿迭代法是一种可以用来快速求解函数零点的方法。 为了叙述方便,我们用 C C C表示待求出平方根的那个整数。显然, C C C的平方根就是函数 f ( x ) x c − C f(x)x^c-C f(x)xc−C 的零点。 牛顿迭代法的本质是借助泰勒级数,从初始值开始快…...

端口隔离配置的实验
端口隔离配置是一种网络安全技术,用于在网络设备中实现不同端口之间的流量隔离和控制。以下是对端口隔离配置的详细解析: 基本概念:端口隔离技术允许用户将不同的端口加入到隔离组中,从而实现这些端口之间的二层数据隔离。这种技…...
洛谷 P10456 The Pilots Brothers‘ refrigerator
[Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription] 给定一个 4 4 4 \times 4 44 的网格,每个网格有 0 , 1 0,1 0,1 两种状态。求最少可以通过多少次操作使得整个网格全部变成 1 1 1。 每次操作你需要选定一个格点 …...
windows+vscode+arm-gcc+openocd+daplink开发arm单片机程序
windowsvscodearm-gccopenocddaplink开发arm单片机程序,脱离keil。目前发现的最佳解决方案是,使用vscodeembedded ide插件。 Embedded IDE官方教程文档...

Mysql梳理10——使用SQL99实现7中JOIN操作
10 使用SQL99实现7中JOIN操作 10.1 使用SQL99实现7中JOIN操作 本案例的数据库文件分享: 通过百度网盘分享的文件:atguigudb.sql 链接:https://pan.baidu.com/s/1iEAJIl0ne3Y07kHd8diMag?pwd2233 提取码:2233 # 正中图 SEL…...
24.9.27学习笔记
Xavier初始化,也称为Glorot初始化,是一种在训练深度神经网络时用于初始化网络权重的策略。它的核心思想是在网络的每一层保持前向传播和反向传播时的激活值和梯度的方差尽可能一致,以避免梯度消失或梯度爆炸的问题。这种方法特别适用于激活函…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...