小团所在的班级今天去郊游了。小团的班级有个人,每个人有一个独一无二的正整数学号 a_i 。因为小团的班级很大(n可能达到 10^9 这么大!),点名成为了一个重大的问题。 小团作为班长,他想让同学们站成一列,他点名的方式如下: 1.如果当前点到的同学不在队列中,则加入队列中的第一个 2.如果当前点到的同学在队列中,则该同学出队,站到队列中第一个,并且不保留他之前的空位。 现在,给出小团的点名顺序,请你算出队列中同学是怎么排的。注意,点名可能存在重复,也可能只点名一部分同学。
输入第一行包含一个整数m,表示小团点名了多少次。注意,n不会在输入中给出。 接下来m行,每行一个整数 a_i ,代表小团每次点名的学号。
输出包含若干个整数,每个整数一行,第i行代表最后站在队列第i位同学的学号。
3 1 2 1
1 2
考点:队列
限制 1 秒 / 256MB | 标准输入输出
参考方向:队列
先进先出的结构,用于模拟排队过程或配合 BFS/单调队列。
思路框架(队列 通法 · 非本题专属)
实现要点:from collections import deque;popleft() 是 O(1)。
复杂度:时间 O(n) | 空间 O(n)
该范式的通法易错点
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。
样例 1:输入 3 / 1 / 2 / 1 → 输出 1 / 2
队列变化如下:
1
2 1
1 2
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:美团2023校招笔试-编程题(算法编程题)。