小米的某一编程题

大致意思:

有一些集合,合并其中有交集的集合,返回最终集合个数,和最长集合的长度,(考试结束10分钟后)写了个动态规划的算法,不知道能不能ac...

def merge(target):
    if(len(target) == 1):
        return [target[0]]
    x = target[0]
    tmp = merge(target[1:])
    flag = 0
    for i in range(len(tmp)):
        if(len(x&tmp[i]) > 0):
            tmp[i] = x|tmp[i]
            flag = 1
    if(flag == 1):
        return tmp
    else:
        tmp = tmp+[x]
        return tmp

while True:
    x = raw_input()
    n = int(x)
    tmp = []
    for i in range(n):
        x = raw_input().strip().split()
        x = map(lambda x:int(x),x)
        x = set(x)
        tmp.append(x)
    temp =  merge(tmp)
    max = 0
    for i in temp:
        if len(i) >= max:
            max = len(i)
    print max,len(temp)

对了,测试用例是

3

1 2 3

2 5 6

8

猜你喜欢

转载自blog.csdn.net/qq_17641711/article/details/82868909