题目:你有一部手机,最多显示k个人发的信息,现在收到n条信息,有可能人是相同的人发的。最新的要顶置,当屏幕上显示的人数已经有k个时,
如果此时又新的人发信息,则把显示屏末端的会消失,最新的顶置。
输入:第一行:n,k n表示短信的条数,k表示屏幕最多显示的人的个数
第二行:有n个数字,分别表示发短信的人,可以相同。
输出:求最终自顶向下显示在屏幕上的朋友
代码:
#include<bits/stdc++.h>
using namespace std;
set<int>s;
deque<int>m;
int main() {
int n,k;
cin>>n;
cin>>k;
for(int i=0; i<n; i++) {
int j;
cin>>j;
if(!s.count(j)) {
m.push_front(j);
s.insert(j);
}
if(m.size()>k) {
s.erase(m.back());
m.pop_back();
}
}
for(int i=0;i<k;i++)
{
cout<<m[i]<<" ";
}
}
输入n k
for(1~n) 循环读入n个朋友
对于每个朋友x
首先用set的count函数set.count(x)判断之前有没有出现过
如果出现过,直接continue跳过,不做任何处理
如果没有出现过,把这个朋友x放入队头deque.push_front(x)
把这个数放入set,set.insert(x) 表示朋友x出现过,然后,
判断deque的size是否大于k,deque.size()
如果大于k,在set中删除deque的队尾那个数,set.erase(deque.back())
然后把deque队尾删除掉,deque.pop_back();
最后输出deque