OPPO · 哈希 · 算法编程题
OPPO 哈希 n ≤ 1e5 时限 1 秒 / 256 MB

题目描述

小欧拿到了一个数组,她可以修改其中任意一个元素的值(也可以不修改),使得出现次数最多的那个元素次数尽可能多。你能求出这个最多的出现次数吗?

输入输出

输入描述
第一行输入一个正整数 n ,代表数组的大小。
第二行输入 n 个正整数 a_i ,代表数组的各个元素。
1≤ n,a_i ≤ 10^5
输出描述
一个正整数,代表小欧操作后出现最多的元素次数。

样例共 2 组

样例 1 · 将1修改为3,数组变成[3,2,3],3出现了2次。修改方式并不是唯一的。
输入
3
1 2 3
输出
2
样例 2 · 由于只有一个数,所以无论是否进行修改,它都只出现了1次。
输入
1
4
输出
1

算法解析依据充分

考点:哈希

数据规模 n ≤ 1e5 | 限制 1 秒 / 256MB | 标准输入输出

题目画像

  • 数据规模:n ≤ 1e5
  • 元素值域:a_i ≤ 1e5(注意整数类型选择,避免溢出)
  • 复杂度门槛:只允许 O(n log n) 及更优,朴素 O(n²) 会超时。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:哈希

本题切入点

统计每种取值的出现次数;把某个元素改成相邻值可使该值计数 +1,因此答案 = max(某值次数, 某值次数 + 另一个被改元素是否为同值或相邻值)。

用哈希表把「查找/计数」的开销降到 O(1) 均摊。

思路框架(哈希 通法 · 非本题专属)

  1. 一次遍历,把元素作为 key、出现次数/首次位置作为 value 存进哈希表。
  2. 第二次遍历(或边扫边查)拿到需要的信息。
  3. 注意哈希无序:需要按原顺序输出时要额外记录顺序。

实现要点:Python 用 dict / collections.Counter / defaultdict;C++ 用 unordered_map。

复杂度:时间 O(n) 均摊 | 空间 O(n)

该范式的通法易错点

  • 遍历哈希表时依赖了不存在的顺序。
  • 多次查询时每次都重新统计。

对照本题

  • 数据规模 n ≤ 1e5,只允许 O(n log n) 及更优,朴素 O(n²) 会超时。
  • 元素值域最大到 1e5 —— 求和 / 相乘时记得开 64 位整数。

样例解读

样例 1:输入 3 / 1 2 3 → 输出 2

将1修改为3,数组变成[3,2,3],3出现了2次。修改方式并不是唯一的。

样例 2:输入 1 / 4 → 输出 1

由于只有一个数,所以无论是否进行修改,它都只出现了1次。

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2023年OPPO秋招移动端岗笔试。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解