1. 问题描述:
给定一个长度为 n 的整数数组 a1,a2,…,an。现在要进行数组去重。对于数值相同的元素,只保留位于数组最右边的那个。去重完成后,剩余所有元素的相对位置应保持不变。输出去重后的数组。
输入格式
第一行包含整数 T,表示共有 T 组测试数据。每组数据第一行包含整数 n。第二行包含 n 个整数 a1,a2,…,an。
输出格式
每组数据输出占两行,第一行输出去重后的数组长度,第二行输出去重后的数组。整数之间单个空格隔开。
数据范围
前三个测试点满足 1 ≤ n ≤ 6。
所有测试点满足 1 ≤ T ≤ 20,1 ≤ n ≤ 50,1 ≤ ai ≤ 1000。
输入样例1:
1
6
1 5 5 1 6 1
输出样例1:
3
5 6 1
输入样例2:
1
5
2 4 2 4 4
输出样例2:
2
2 4
输入样例3:
1
5
6 6 6 6 6
输出样例3:
1
6
来源:https://www.acwing.com/problem/content/3806/
2. 思路分析:
分析题目可以知道可以使用哈希表来记录所有的数字对应的最后一个位置即可。
3. 代码如下:
class Solution:
def process(self):
T = int(input())
for c in range(T):
n = int(input())
a = list(map(int, input().split()))
mp = dict()
for i in range(n):
mp[a[i]] = i
print(len(mp))
for i in range(n):
if mp[a[i]] == i:
print(a[i], end=" ")
print()
if __name__ == '__main__':
Solution().process()