字节跳动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)