笨办法,跑得慢。面试肯定得被问follow up。
class Solution:
def maximalNetworkRank(self, n: int, roads: List[List[int]]) -> int:
if len(roads) == 0:return 0
graph = collections.defaultdict(list)
for a,b in roads:
graph[a].append(b)
graph[b].append(a)
res = float('-inf')
for a in range(n):
for b in range(a):
res1 = len(graph[a])
res2 = len(graph[b])
if [a,b] in roads or [b,a] in roads:
res = max(res1+res2-1, res)
else:
res = max(res1+res2, res)
return res
稍微改进一下,可以快一些。
class Solution:
def maximalNetworkRank(self, n: int, roads: List[List[int]]) -> int:
conn = collections.defaultdict(int)
dircon = collections.defaultdict(bool)
for a,b in roads:
conn[a] += 1
conn[b] += 1
dircon[(a,b)] = True
dircon[(b,a)] = True
res = float('-inf')
for a in range(n-1):
for b in range(a+1, n):
if dircon[(a,b)] or dircon[(b,a)]:
res = max(res, conn[a] + conn[b] - 1)
else:
res = max(res, conn[a] + conn[b])
return res