9.13华为OD机试真题 新系统 – 手机桌面整理 (JavaPyCC++JsGo)

2026 华为OD机试真题9月13日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

手机系统管理一个App列表,按最近使用App操作排序;

用户可以对App进行如下操作:

  • OPEN Name: 打开App;若App已存在,将其移至列表最前面,打开次数 +1,返回当前打开次数;若App不存在,返回-1
  • INSTALL name:安装App;若APP已存在,将其移至列表最前面,打开次数不变;若APP不存在,将其添加至列表最前面,打开次数设置为0;若列表已满,先卸载最久未使用APP再安装,INSTALL操作无返回值。
  • UNINSTALL name:卸载App;若APP已存在,移除该APP并返回其打开次数;若APP不存在,返回-1。否则返回该APP的打开次数。

先给定一组用户操作指令,请统计所有OPEN和UNINSTALL操作的返回值。

2026 华为OD机试真题9月13日华为OD上机新系统考试真题 100 分题型

输入描述

参数 capacity(0≤capacity≤103) 为一个整数,表示 App 列表的长度上限。

参数 operations 为一个字符串数组,长度 len(1≤len≤103),每个元素是一条操作指令,格式为操作名与 App 名称之间用一个空格隔开,操作名为 OPEN、INSTALL、UNINSTALL 之一。

App 名称由英文字母或数字组成(区分大小写),名称长度 L(1≤L≤20)。

为了便于在线判题,输入的第一行为容量 capacity,后续每一行是一条操作指令,读取到文件结束为止。

输出描述

按顺序统计OPEN和UNINSTALL操作的返回值

示例1

输入

2
INSTALL G1
INSTALL L2
OPEN G1
INSTALL VS
OPEN L2
UNINSTALL G1
OPEN G1

输出

[1,-1,1,-1]

说明

  • INSTALL G1, 列表变为G1(0)
  • INSTALL L2,列表变为L2(0) -> G1(0)
  • OPEN G1``,列表变为 G1(1) -> L2(0)`, open 返回1
  • INSTALL VS, 列表变为VS(0) -> G1(1)
  • OPEN L2, 不存在L2,返回-1
  • ``UNINSTALL G1,列表变为VS(0)`, 返回1
  • OPEN G1, 不存在G1,返回-1

示例2

输入

3
INSTALL WeChat
INSTALL Map
OPEN Map
OPEN Map
INSTALL WeChat
INSTALL Music
INSTALL Mail
OPEN Map
UNINSTALL Music
UNINSTALL Map

输出

[1,2,-1,0,-1]

说明

前两条安装后列表为 Map(0) -> WeChat(0),两次 OPEN Map 依次返回 1,2,列表为 Map(2) -> WeChat(0)。

INSTALL WeChat 时 WeChat 已存在,只把它移到最前面,列表变为 WeChat(0) -> Map(2)。

INSTALL Music 后列表为 Music(0) -> WeChat(0) -> Map(2),已满。

INSTALL Mail 时先卸载最久未使用的 Map,列表变为 Mail(0) -> Music(0) -> WeChat(0)。

OPEN Map 返回 −1,UNINSTALL Music 返回其打开次数 0,UNINSTALL Map 返回 −1。

示例3

输入

0
INSTALL Game
OPEN Game
UNINSTALL Game

输出

[-1,-1]

说明

列表长度上限为 0,一个 App 也放不下,INSTALL Game 装不进去,之后的 OPEN Game 与 UNINSTALL Game 都找不到该 App,各返回 −1。

解题思路

核心思想

本题虽然属于 LRU(Least Recently Used,最近最少使用)场景,但操作数量和容量都不超过 10^3,没有必要手写双向链表节点。

可以使用一个哈希表保存每个 App 的两个信息:

  1. openCount:当前打开次数。
  2. lastUsed:最近一次成功执行 OPEN 或 INSTALL 时的时间戳。

每次成功使用 App,就把递增计数器作为新的 lastUsed。容量已满时,遍历当前已安装 App,删除 lastUsed 最小的一个即可。

算法步骤

  1. 初始化空哈希表和时间戳计数器 clock。
  2. 遇到 OPEN name:App 不存在时记录 -1;否则打开次数加一,并更新其时间戳。
  3. 遇到 INSTALL name:已存在时只更新时间戳;不存在且容量为 时忽略;桌面已满时删除时间戳最小的 App,再保存新 App,打开次数为 。
  4. 遇到 UNINSTALL name:不存在时记录 -1;否则记录其打开次数,再从哈希表中删除。
  5. 按产生顺序输出所有 OPEN 和 UNINSTALL 的返回值。

复杂度分析

  • 时间复杂度:O(n × capacity),只有容量已满且安装新 App 时需要遍历当前桌面;在本题 n、capacity ≤ 10^3 的范围内最多约一百万次检查。
  • 空间复杂度:O(capacity),最多保存 capacity 个已安装 Ap
THE END