最大网络秩【LC1615】
n
座城市和一些连接这些城市的道路roads
共同组成一个基础设施网络。每个roads[i] = [ai, bi]
都表示在城市ai
和bi
之间有一条双向道路。两座不同城市构成的 城市对 的 网络秩 定义为:与这两座城市 直接 相连的道路总数。如果存在一条道路直接连接这两座城市,则这条道路只计算 一次 。
整个基础设施网络的 最大网络秩 是所有不同城市对中的 最大网络秩 。
给你整数
n
和数组roads
,返回整个基础设施网络的 最大网络秩 。
这个交换机的声音真受不了了 还不能带耳机 泪目
-
思路:
枚举所有的城市对,如果两个城市之间可达,那么网络秩为这两个城市的出度之和-1;如果两个城市之间不可达,那么网络秩为两个城市的出度之和
-
实现
使用哈希表存储每个城市可以到达的其他城市,那么出度即为哈希表的大小,如果哈希表中包含另一个城市,那么表示这两个城市可达
class Solution { public int maximalNetworkRank(int n, int[][] roads) { Set<Integer>[] g = new Set[n]; Arrays.setAll(g, e -> new HashSet<>()); for (int[] road :roads){ int u = road[0], v = road[1]; g[u].add(v); g[v].add(u); } int res = 0; for (int i = 0; i < n; i++){ for (int j = i + 1; j < n; j++){ int count = g[i].size() + g[j].size() + (g[i].contains(j) ? -1 : 0); res = Math.max(res, count); } } return res; } }
- 复杂度分析
- 时间复杂度: O ( n 2 ) O(n^2) O(n2)
- 空间复杂度: O ( n 2 ) O(n^2) O(n2)
- 复杂度分析