由 n 个节点组成的星型图中,有一个中心节点,有 n - 1 条边分别连接中心节点和其余的每个节点。因此,中心节点的度是 n - 1,其余每个节点的度都是 1。一个节点的度的含义是与该节点相连的边数。
遍历 edges 中的每条边并计算每个节点的度,度为 n - 1 的节点即为中心节点。
[sol1-Python3]
1 2 3 4 5 6 7 8 9 10
classSolution: deffindCenter(self, edges: List[List[int]]) -> int: n = len(edges) + 1 degrees = [0] * (n + 1) for x, y in edges: degrees[x] += 1 degrees[y] += 1 for i, d inenumerate(degrees): if d == n - 1: return i
publicclassSolution { publicintFindCenter(int[][] edges) { int n = edges.Length + 1; int[] degrees = newint[n + 1]; foreach (int[] edge in edges) { degrees[edge[0]]++; degrees[edge[1]]++; } for (int i = 1; ; i++) { if (degrees[i] == n - 1) { return i; } } } }
[sol1-C++]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
classSolution { public: intfindCenter(vector<vector<int>>& edges){ int n = edges.size() + 1; vector<int> degrees(n + 1); for (auto & edge : edges) { degrees[edge[0]]++; degrees[edge[1]]++; } for (int i = 1; ; i++) { if (degrees[i] == n - 1) { return i; } } } };
[sol1-C]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
intfindCenter(int** edges, int edgesSize, int* edgesColSize){ int n = edgesSize + 1; int * degrees = (int *)malloc(sizeof(int) * (n + 1)); memset(degrees,0,sizeof(int) * (n + 1)); for (int i = 0; i < edgesSize; i++) { degrees[edges[i][0]]++; degrees[edges[i][1]]++; } for (int i = 1; ; i++) { if (degrees[i] == n - 1) { free(degrees); return i; } } }
[sol1-JavaScript]
1 2 3 4 5 6 7 8 9 10 11 12 13
var findCenter = function(edges) { const n = edges.length + 1; const degrees = newArray(n + 1).fill(0); for (const edge of edges) { degrees[edge[0]]++; degrees[edge[1]]++; } for (let i = 1; ; i++) { if (degrees[i] === n - 1) { return i; } } };
[sol1-Golang]
1 2 3 4 5 6 7 8 9 10 11 12 13 14
funcfindCenter(edges [][]int)int { n := len(edges) + 1 degrees := make([]int, n+1) for _, e := range edges { degrees[e[0]]++ degrees[e[1]]++ } for i, d := range degrees { if d == n-1 { return i } } return-1 }
复杂度分析
时间复杂度:O(n),其中 n 是星型图中的节点数量。需要遍历 n - 1 条边计算每个节点的度,然后遍历 n 个节点寻找中心节点。
空间复杂度:O(n),其中 n 是星型图中的节点数量。需要创建数组存储每个节点的度。
方法二:寻找出现在两条边中的节点
由于只有星型图的中心节点的度是 n - 1,其余每个节点的度都是 1,因此只有星型图在所有的边中都出现,其余每个节点分别只在一条边中出现。