2 条题解
-
1
注意到
每个字符只出现一次而且还不能改变顺序
那么问题来了
那咱们遍历数组
用一个哈希存储这个数字有没有出现过
如果出现过就跳过,没有就加入到ans数组里
最后输出ans数组即可
C++
#define AC ios::sync_with_stdio(false),cin.tie(0),cout.tie(0) #define ll long long #define vec vector ll n; int main() { AC; cin>>n; unordered_set<ll>hx; vec<ll>ans; for(int i=0;i<n;++i) { ll x; cin>>x; if(hx.find(x)==hx.end()) { hx.insert(x); ans.push_back(x); } } for(int i=0;i<(int) ans.size();++i) cout<<ans[i]<<' '; return 0; }Python
import sys arr=list(map(int,sys.stdin.read().split())) n=arr[0] s=set() res=[] for i in range(1,n+1): x=arr[i] if x not in s: s.add(x) res.append(str(x)) print(' '.join(res)) -
0
注意到本题中, 的范围为 , 因此我们可以直接开一个长度为100的数组,修改和查询对应下标内容时间复杂度为,
遍历原数组复杂度为。
综合总复杂度为。
代码示例:
n = int(input()) appear = [0 for i in range(101)] arr = list(map(int,input().split())) ans = [] for i in arr: if appear[i] == 0: ans.append(i) appear[i] = 1 print(*ans)这个方法仅限用于 情况下,更大情况请参考隔壁破寻负的题解
另外,因此题n足够小,故循环嵌套检查的方法也可以通过本题
- 1
信息
- ID
- 1168
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 16
- 已通过
- 9
- 上传者