题目要求对长度为
n
n
n 的序列进行
m
m
m 次操作,每次将选中的数字
k
i
k_i
ki 移到序列最前面
关键点是要从后往前处理输入的操作序列,并用一个 visited 数组记录已经输出的数字
最后需要按顺序输出剩余未被访问过的数字
本质上是一个模拟题,需要注意处理顺序
代码
#include<iostream>#include<vector>usingnamespace std;intmain(){int n, m;
cin >> n >> m;
vector<bool>visited(n +1,false);
vector<int>operations(m);// 读入操作序列for(int i =0; i < m; i++){
cin >> operations[i];}// 从后向前处理操作for(int i = m -1; i >=0; i--){if(!visited[operations[i]]){
cout << operations[i]<< endl;
visited[operations[i]]=true;}}// 输出剩余未访问的数字for(int i =1; i <= n; i++){if(!visited[i]){
cout << i << endl;}}return0;}
importjava.util.*;publicclassMain{publicstaticvoidmain(String[] args){Scanner sc =newScanner(System.in);int n = sc.nextInt();int m = sc.nextInt();boolean[] visited =newboolean[n +1];int[] operations =newint[m];// 读入操作序列for(int i =0; i < m; i++){
operations[i]= sc.nextInt();}// 从后向前处理操作for(int i = m -1; i >=0; i--){if(!visited[operations[i]]){System.out.println(operations[i]);
visited[operations[i]]=true;}}// 输出剩余未访问的数字for(int i =1; i <= n; i++){if(!visited[i]){System.out.println(i);}}}}
n, m =map(int,input().split())
visited =[False]*(n +1)
operations =[]# 读入操作序列for _ inrange(m):
operations.append(int(input()))# 从后向前处理操作for i inrange(m-1,-1,-1):ifnot visited[operations[i]]:print(operations[i])
visited[operations[i]]=True# 输出剩余未访问的数字for i inrange(1, n +1):ifnot visited[i]:print(i)
算法及复杂度
算法:模拟 + 哈希表(visited数组)
时间复杂度:
O
(
n
+
m
)
\mathcal{O}(n + m)
O(n+m) - 需要遍历一次操作序列和剩余数字
空间复杂度:
O
(
n
)
\mathcal{O}(n)
O(n) - 需要一个visited数组记录访问状态
#include<iostream>usingnamespace std;intmain(){int n, sum =0, sum1 =0;
cin >> n;// 计算0到n的和for(int i =0; i <= n; i++){
sum += i;}// 计算给定序列的和for(int i =0; i < n; i++){int temp;
cin >> temp;
sum1 += temp;}// 输出差值
cout << sum - sum1 << endl;return0;}
importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[] args){Scanner sc =newScanner(System.in);int n = sc.nextInt();int sum =0, sum1 =0;// 计算0到n的和for(int i =0; i <= n; i++){
sum += i;}// 计算给定序列的和for(int i =0; i < n; i++){
sum1 += sc.nextInt();}// 输出差值System.out.println(sum - sum1);}}