美团 · 哈希 · 算法编程题
美团 哈希 n ≤ 1e4 时限 1 秒 / 256 MB

题目描述

小团是一个旅游爱好者,快要过春节了,他想统计一下,在过去的一年中他进行过几次旅行,于是他打开了美团app的订单记录,记录显示了他的购买车票的记录。记录是按时间顺序给出的,已知一次旅行的线路一定是一个闭环,即起点和终点是同一个地点。因此当每找到一段闭合的行程,即认为完成了一次旅行。数据保证不会出现不在闭环路径中的数据。
请你在小团的购票记录中统计出他全年共进行了多少次旅行?
数据范围: 1 ≤ n ≤ 10000 , 1 ≤ len(S_a) ,len(S_b)≤10
进阶:时间复杂度 O(n) ,空间复杂度 O(n)

输入输出

输入描述
输入第一行包含一个正整数n,表示小团的购票记录数量。(1接下来有n行,每行是两个长度不超过10的仅由小写字母组成的字符串S_a S_b,表示购买了一张从S_a到S_b的车票。
输出描述
输出仅包含一个整数,表示小团的旅行次数。

样例共 1 组

样例 1
输入
6
beijing nanjing
nanjing guangzhou
guangzhou shanghai
shanghai beijing
fuzhou beijing
beijing fuzhou
输出
2

算法解析依据充分

考点:哈希

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

题目画像

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

解题思路

推荐方向:哈希

本题切入点

一次旅行是一个闭环,用哈希表记录「从某地出发」的次数并与「到达某地」配对,统计闭环数量。

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

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

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

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

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

该范式的通法易错点

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

对照本题

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

题目给出的提示

  • 不会出现不在闭环路径中的数据

样例

样例 1

  • 输入:6 / beijing nanjing / nanjing guangzhou / guangzhou shanghai / shanghai beijing / fuzhou beijing / beijing fuzhou
  • 输出:2

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

本题来源:美团2023校招技术第2场编程题。

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