- Translate each rule into one explicit state update.
- Maintain the invariant after every processed item.
- Return the accumulated state once all relevant input has been handled.
Code notes
- 61 lines of Python from the credited upstream file 1615.py.
- The implementation visibly relies on sequence storage.
- No explicit loop blocks detected.
Complexity
Count the number and nesting of passes over the input, then include the maintained containers in the memory estimate.
Check the problem constraints before deciding whether this complexity will pass.
Use this to learn the idea, then write your own version.
1class Solution:2 def maximalNetworkRank(self, n: int, roads: list[list[int]]) -> int:3 degrees = [0] * n4 5 for u, v in roads:6 degrees[u] += 17 degrees[v] += 18 9 10 maxDegree1 = 011 maxDegree2 = 012 for degree in degrees:13 if degree > maxDegree1:14 maxDegree2 = maxDegree115 maxDegree1 = degree16 elif degree > maxDegree2:17 maxDegree2 = degree18 19 20 21 countMaxDegree1 = 022 countMaxDegree2 = 023 for degree in degrees:24 if degree == maxDegree1:25 countMaxDegree1 += 126 elif degree == maxDegree2:27 countMaxDegree2 += 128 29 if countMaxDegree1 == 1:30 31 32 33 34 edgeCount = (self._getEdgeCount(roads, degrees, maxDegree1, maxDegree2) +35 self._getEdgeCount(roads, degrees, maxDegree2, maxDegree1))36 return maxDegree1 + maxDegree2 - (countMaxDegree2 == edgeCount)37 else:38 39 40 41 42 edgeCount = self._getEdgeCount(roads, degrees, maxDegree1, maxDegree1)43 maxPossibleEdgeCount = countMaxDegree1 * (countMaxDegree1 - 1) 244 return 2 * maxDegree1 - (maxPossibleEdgeCount == edgeCount)45 46 def _getEdgeCount(47 self,48 roads: list[list[int]],49 degrees: list[int],50 degreeU: int, degreeV: int,51 ) -> int:52 """53 Returns the number of edges (u, v) where degress[u] == degreeU and54 degrees[v] == degreeV.55 """56 edgeCount = 057 for u, v in roads:58 if degrees[u] == degreeU and degrees[v] == degreeV:59 edgeCount += 160 return edgeCount61