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

题目描述

小P给了小O一个长为 n 的数组 a_1,a_2,...,a_n ,初始数组中的每个数字都是白色。小O可以进行如下操作:
·
选择一个区间 [l,r] ,满足 a_l = a_r ,将区间所有元素染红。
小O想知道她最少几次操作可以将所有数字都染红,请你帮帮他吧。

输入输出

输入描述
每个测试文件均包含多个测试点。第一行输入一个整数 T(1≤ T≤ 10^4) 代表测试数据组数,每组测试数据描述如下:
第一行输入一个整数 n(1 ≤ n ≤ 2· 10^5) 表示数组 a 的长度。
第二行输入 n 个整数 a_1,a_2,...,a_n(1 ≤ a_i ≤ 10^9) 表示数组 a_i 的元素。
除此之外,保证所有的 n 的之和不超过 2 · 10^5 。
输出描述
对于每一个测试点,在一行上输出一个正整数,表示染红所有数字的最小操作次数。

样例共 1 组

样例 1 · 对于第一组测试数据 2次操作即可,第一次选择: l = 1, r = 4 ,第二次选择: l = 2, r = 5 。
输入
2
5
1 2 3 1 2
3
1 2 3
输出
2
3

算法解析依据充分

考点:哈希 · 贪心

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

题目画像

  • 数据规模:T ≤ 1e4,n ≤ 2
  • 元素值域:a_i ≤ 1e9(注意整数类型选择,避免溢出)
  • 复杂度门槛:允许指数级做法:暴力枚举全部子集 2^n / 回溯搜索 / 状压 DP。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:哈希

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

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

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

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

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

该范式的通法易错点

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

对照本题

  • 数据规模 n ≤ 2,允许指数级做法:暴力枚举全部子集 2^n / 回溯搜索 / 状压 DP。
  • 元素值域最大到 1e9 —— 求和 / 相乘时记得开 64 位整数。

样例解读

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

对于第一组测试数据

2次操作即可,第一次选择: l = 1, r = 4 ,第二次选择: l = 2, r = 5 。

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

本题来源:2024年秋招-OPPO-数据开发岗笔试。

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