文章目录
前言
本人也是练习者,仅提供参考思路和题解。如有不正确的地方,欢迎大家评论指正,大家一起学习进步
题目:小苯的文章浏览
题目描述
小苯是小红书的忠实用户之一。
这天,在“小红书app”发了一篇文章后,收获了若干浏览量。但其中有人浏览了多次,小苯现在想知道所有人第一次浏览的先后顺序,请你帮帮他吧。
输入描述
输入包含n+1行。
第一行一个正整数n(1 <= n <= 105),表示小苯拿到的浏览记录的记录条数。
接下来每行一个字符串s (长度在20)以内,表示id为s的用户此时浏览了一次小苯的文章。
输出描述
输出包含若干行,每行一个字符串s,表示用户的id。按照每个浏览的用户第一次浏览的顺序输出。
输入示例
8
qcjj
benh
qsmcgogo
qcjj
ducksajin
benh
ducksajin
acidlemon
输出示例
qcjj
benh
qsmcgogo
ducksajin
acidlemon
提示信息
共有以上5人点赞,按照第—次点的顺序输出即可。
时间限制:c/c++/go:1s;其他语言:3s。
参考思路
这题总体思路较简单
使用集合(id_set)记录出现的字符,如果字符出现过,则不插入这个集合
如果没有出现过,则插入集合,并插入要输出的答案(result)里面
最后按照顺序输出答案即可
参考题解
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
scanf("%d", &n);
vector<string> result;
unordered_set<string> id_set;
for (int i = 0; i < n; ++i) {
string id;
cin >> id;
if (id_set.count(id)) continue;
id_set.emplace(id);
result.emplace_back(id);
}
for (const string &it : result) {
cout << it << '\n';
}
}
复杂度分析
时间复杂度:O(n)
空间复杂度:O(n|C|), C为常数,即字符串的最大长度