通过万岁!!!
- 题目:给你一个n*2的数组roads,每一行有两个数,表示从roads[i][0]到roads[i][1]之间有一条路相连。然后想问一下,有没有两不同的城市,使得他们能够到达更多的城市。
- 思路:首先就是给定的这个数组,我们转换到nn的数组中去,记录从i到j是否有道路相连,并且定义一个新的数组,长度为n,记录n个城市的有多少个出入口。然后遍历nn的数组即可,且只需要上三角或者下三角即可。遍历过程中,统计两两城市的出入口个数,找最大值即可,这里注意,如果i和j城市相连的话,则要记得进行减一操作。
- 技巧:数组便利
java代码
class Solution {
public int maximalNetworkRank(int n, int[][] roads) {
boolean[][] map = new boolean[n][n];
int[] roadNumber = new int[n];
for (int[] road : roads) {
map[road[0]][road[1]] = true;
map[road[1]][road[0]] = true;
roadNumber[road[0]]++;
roadNumber[road[1]]++;
}
int res = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
int rank = roadNumber[i] + roadNumber[j] - (map[i][j] ? 1 : 0);
res = Math.max(res, rank);
}
}
return res;
}
}
- 总结:题目不是特别难,主要是构造一个数组,然后进行遍历就行了。