美团 · 并查集 · 算法编程题
美团 并查集 n ≤ 1e4 时限 1 秒 / 256 MB

题目描述

小美拿到了一个长度为 n 的字符串,她希望将字符串从左到右平铺成一个矩阵(先平铺第一行,然后是第二行,以此类推,矩阵有 x 行 y 列,必须保证 x*y=n ,即每 y 个字符换行,共 x 行)。
该矩阵的权值定义为这个矩阵的连通块数量。小美希望最终矩阵的权值尽可能小,你能帮小美求出这个最小权值吗?
注:我们定义,上下左右四个方向相邻的相同字符是连通的。

输入输出

输入描述
第一行输入一个正整数 n ,代表字符串的长度。
第二行输入一个长度为 n 的、仅由小写字母组成的字符串。
1≤ n ≤ 10^4
输出描述
输出一个整数表示最小权值。

样例共 1 组

样例 1 · 平铺为3*3的矩阵: aab abb abb 共有2个连通块,4个a和5个b。
输入
9
aababbabb
输出
2

算法解析依据一般

考点:并查集

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

题目画像

  • 数据规模:n ≤ 1e4
  • 复杂度门槛:只允许 O(n log n) 及更优,朴素 O(n²) 会超时。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:并查集

用「代表元」高效维护集合合并与连通性查询,均摊近 O(1)。

思路框架(并查集 通法 · 非本题专属)

  1. 初始化 parent[i] = i。
  2. find(x) 找根节点,路径压缩把链压平。
  3. union(x,y) 把两个根合并(按秩/大小合并更优)。
  4. 最终统计有几个不同的根,即有多少个连通块。

实现要点:路径压缩 + 按大小合并,复杂度近似 O(α(n))。

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

该范式的通法易错点

  • 只做路径压缩没做按秩合并,极坏情况下仍会退化。
  • 统计连通块时忘了再压缩一次根。

对照本题

  • 数据规模 n ≤ 1e4,只允许 O(n log n) 及更优,朴素 O(n²) 会超时。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例解读

样例 1:输入 9 / aababbabb → 输出 2

平铺为3*3的矩阵:

aab

abb

abb

共有2个连通块,4个a和5个b。

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

本题来源:2023年美团秋招编程岗第一批笔试。

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