描述
有两个数组A={a1,a2,...,an}, B={b1,b2,...,bm}。
其中a1<=a2<=...<=an, b1<=b2<=...<=bm, 要求将其合并为一个更大的有序数组,并且去除重复元素。
输入
第一行输入一个整数t,表示测试数据的组数。
对于每组测试数据,第一行输入两个整数n、m。分别代表数组A和B的长度。第二行输入n个整数,代表A的各个元素。第三行输入m个整数,代表B的各个元素。
1<=n,m<=100000.
输出
对于每组数据,输出两行。第一行输出一个整数K,表示合并后数组的元素个数。第二行输出K个整数,代表合并后数组的各个元素。
样例输入
2 3 3 1 3 5 2 3 4 2 2 1 2 3 4
样例输出
5 1 2 3 4 5 4 1 2 3 4
提示
利用AB两个数组已经有序的条件,考虑元素重复.
n,m较大,数组应该开成全局变量
#include
//here
int a[100010],b[100010];
int main()
{
// ... not here
}
def duplicate(slist):
result = []
last = list[0]
result.append(last)
for i in range(1, len(list)):
if list[i] == last:
continue
result.append(list[i])
last = list[i]
return result
t = int(input()) # 组数
for i in range(t):
n, m = map(int, input().split()) # A,B数组的个数
listA = list(map(int, input().split()))
listB = list(map(int, input().split()))
result = [] # 合并后的数组
indexA = indexB = 0
while indexA < n and indexB < m:
if listA[indexA] <= listB[indexB]:
result.append(listA[indexA])
indexA += 1
else:
result.append(listB[indexB])
indexB += 1
while indexA < n:
result.append(listA[indexA])
indexA += 1
while indexB < n:
result.append(listB[indexB])
indexB += 1
result = duplicate(result)
print(len(result))
print(" ".join(str(i) for i in result))