字节跳动2020届秋招8月25日,算法第四题

def fun2(a,b):
    while a != b:
        if a > b:
            a = a - b
        else:
            b = b - a
    return b

if __name__ == "__main__":
    n = int(input())
    suger = [int(x) for x in input().strip().split(' ')]
    net = [[0 for _ in range(n)] for _ in range(n)]
    for i in range(n):
        for j in range(i+1, n):
            if fun2(suger[i], suger[j]) > 1:
                net[i][j] = 1
                net[j][i] = 1
    vis = [0]*n
    ans = 0
    while min(vis) == 0:
        t = [i for i in range(n) if vis[i] == 0]
        vis[t[0]] = 1
        q = []
        q.append(t[0])
        res = 0
        while q:
            h = q.pop(0)
            res += 1
            for j in range(n):
                if net[h][j] == 1 and vis[j] == 0:
                    q.append(j)
                    vis[j] = 1
        ans = max(ans, res)
    print(ans)
通过70%

优化了下 内存
def fun2(a,b):
    while a != b:
        if a > b:
            a = a - b
        else:
            b = b - a
    return b

if __name__ == "__main__":
    n = int(input())
    suger = [int(x) for x in input().strip().split(' ')]
    net = []
    for i in range(n):
        node = []
        for j in range(i+1, n):
            if fun2(suger[i], suger[j]) > 1:
                node.append(j)
        net.append(node)
    vis = [0]*n
    ans = 0
    while min(vis) == 0:
        t = [i for i in range(n) if vis[i] == 0]
        vis[t[0]] = 1
        q = []
        q.append(t[0])
        res = 0
        while q:
            h = q.pop(0)
            res += 1
            for j in net[h]:
                if vis[j] == 0:
                    q.append(j)
                    vis[j] = 1
        ans = max(ans, res)
    print(ans)


#字节跳动##笔试题目#
全部评论
还有嘛?
点赞 回复 分享
发布于 2019-08-25 20:49
求答案
点赞 回复 分享
发布于 2019-08-25 20:50
大佬牛逼我用并查集做的,过了70%,大佬全A了吧
点赞 回复 分享
发布于 2019-08-25 21:12

相关推荐

评论
2
9
分享

创作者周榜

更多
牛客网
牛客企业服务