美团 · 队列 · 算法编程题
美团 队列 时限 1 秒 / 256 MB

题目描述

小团所在的班级今天去郊游了。小团的班级有个人,每个人有一个独一无二的正整数学号 a_i 。因为小团的班级很大(n可能达到 10^9 这么大!),点名成为了一个重大的问题。
小团作为班长,他想让同学们站成一列,他点名的方式如下:
1.如果当前点到的同学不在队列中,则加入队列中的第一个
2.如果当前点到的同学在队列中,则该同学出队,站到队列中第一个,并且不保留他之前的空位。
现在,给出小团的点名顺序,请你算出队列中同学是怎么排的。注意,点名可能存在重复,也可能只点名一部分同学。

输入输出

输入描述
输入第一行包含一个整数m,表示小团点名了多少次。注意,n不会在输入中给出。
接下来m行,每行一个整数 a_i ,代表小团每次点名的学号。
输出描述
输出包含若干个整数,每个整数一行,第i行代表最后站在队列第i位同学的学号。

样例共 1 组

样例 1 · 队列变化如下: 1 2 1 1 2
输入
3
1
2
1
输出
1
2

算法解析依据一般

考点:队列

限制 1 秒 / 256MB | 标准输入输出

题目画像

  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:队列

先进先出的结构,用于模拟排队过程或配合 BFS/单调队列。

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

  1. 用双端队列 deque 实现,避免 list.pop(0) 的 O(n) 开销。
  2. 单调队列可在滑动窗口中 O(n) 求最大/最小值。
  3. 模拟类题目按时间顺序推进,注意同一时刻多个事件的先后。

实现要点:from collections import deque;popleft() 是 O(1)。

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

该范式的通法易错点

  • 用 list.pop(0) 造成 O(n²)。
  • 忘处理队列为空的情况。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

题目给出的提示

  • 点名可能存在重复,也可能只点名一部分同学

样例解读

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

队列变化如下:

1

2 1

1 2

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

本题来源:美团2023校招笔试-编程题(算法编程题)。

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