深信服2019春招笔试----查找重复序列


已知某序列S=,序列中的元素类型为整数(en <= 2^10),序列的长度为可变长度。
现在有若干序列S1,S2,…,Sn,现在要求设计一种算法,找出这些重复的序列。输出重复序列的序号,如果有多组重复,需全部输出。

所有序列中的数字个数加起来,小于1000000,序列个数小于10000个。

例如现有3个序列
S1=<65,43,177,655>
S2=<1,2,3,4,5,6,7>
S3=<65,43,177,655,3>
这时序列无重复。又如
S1=<65,43,177,655,3>
S2=<1,2,3,4,5,6,7>
S3=<65,43,177,655,3>
这时序列有重复。

输入描述:

第一行为一个正整数N,N>=1且N<10000

接下来为2*N数据,每两行表示一个序列,序列的第一行为序列长度L,第二行为序列的数字,一共L个

输出描述:

重复序列的序号,每一行X个数字,表示一组相同的序列,这一组相同序列共有X个,输出这X个序列的序号

输入

11
10
794 472 991 500 615 872 518 827 673 203 
1
427 
7
367 718 202 187 683 321 831 
10
1023 78 310 816 158 500 518 705 553 470 
8
205 190 306 492 166 49 791 961 
6
665 211 1009 614 15 683 
2
195 946 
3
678 198 495 
8
205 190 306 492 166 49 791 961 
5
83 74 1023 453 692 
2
176 157 

输出

4 8
N=int(input())
tmp=[]
dic={}
alist=[[] for i in range(N)]
for i in range(N):
    L=int(input())
    tmp.append(tuple(map(int,input().split())))
for i in range(len(tmp)):
    if tmp[i] not in dic:
        dic[tmp[i]]=i
    else:
        if dic[tmp[i]] not in alist[dic[tmp[i]]]:
            alist[dic[tmp[i]]].append(dic[tmp[i]])
        alist[dic[tmp[i]]].append(i)
# print(dic)
# print(alist)
if alist==[[] for i in range(N)]:
    print('no')
else:
    for i in alist:
        if i!=[]:
            t=[str(j) for j in i]
            p=' '.join(t)
            print(p)

 

你可能感兴趣的:(排序算法)