美团 · 图 · 算法编程题
美团 n ≤ 200000 时限 1 秒 / 256 MB

题目描述

由于小美对图论十分感兴趣,因此小美希望创建一个属于自己的无向图。他有一个长度为 n 的数组 a ,他认为一对数字 i, j 是好的当且仅当:
, j(1 ≤ i < j ≤ n) 同时 i-j < a_i - a_j 。
小美创建图的方式则是:对于任意一个点对 u, v(1 ≤ u, v ≤ n) ,如果 u,v 是一对好的数字,则他会在 u,v 之间连上一条无向边。
现在小美想知道,他所创建出的图有多少个极大连通块。由于图中的边数过多他数不过来,因此他想请你帮他算一算。
对于图上的两个点,如果它们之间有边相连,则称他们位于同一个连通块里。对于一个连通块,如果其已经无法再加入更多的点,则称其为极大连通块。

输入输出

输入描述
每个测试文件均包含多组测试数据。第一行输入一个整数 T(1≤ T≤ 100) 代表数据组数,每组测试数据描述如下:
第一行输入一个整数 n(1 ≤ n ≤ 2 × 10^5) ,表示数组 a 的长度。
第二行输入 n 个正整数 a_1, a_2, ..., a_n(1 ≤ a_i ≤ 10^9) ,表示数组。
除此之外,保证单个测试文件的 n 之和不超过 2 × 10^5 。
输出描述
对于每组测试数据:
输出一行一个正整数表示他的图中连通块的个数。

样例共 1 组

样例 1
输入
2
4
3 3 4 6
5
1 2 3 4 5
输出
2
5

算法解析依据充分

考点:数组 · 图 · 前缀和

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

题目画像

  • 数据规模:n ≤ 200000,T ≤ 100
  • 元素值域:a_i ≤ 1e9(注意整数类型选择,避免溢出)
  • 复杂度门槛:只允许 O(n) 或 O(n log n),且常数要小(注意读入效率)。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:图

把关系抽象成点与边,再按问的类型选遍历/最短路/连通性算法。

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

  1. 建图:邻接表(稀疏)或邻接矩阵(稠密)。
  2. 问「最少几步 / 最短路径」且边权为 1 → BFS。
  3. 问「是否连通 / 需要加几条边连通」→ 并查集 / 连通块计数。
  4. 问「带权最短路」→ Dijkstra(非负权)或 Floyd(点数小、多源)。
  5. 问「依赖顺序」→ 拓扑排序。

实现要点:注意是有向图还是无向图,无向图加边记得双向。

复杂度:时间 O(V+E) 遍历 / O(E log V) Dijkstra | 空间 O(V+E)

该范式的通法易错点

  • 无向图只加了单向边。
  • BFS 入队时没标记访问,导致重复入队。

对照本题

  • 数据规模 n ≤ 200000,只允许 O(n) 或 O(n log n),且常数要小(注意读入效率)。
  • 元素值域最大到 1e9 —— 求和 / 相乘时记得开 64 位整数。

样例

样例 1

  • 输入:2 / 4 / 3 3 4 6 / 5 / 1 2 3 4 5
  • 输出:2 / 5

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

本题来源:2025年春招-美团-算法岗笔试。

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