欢迎关注更多精彩
关注我,学习常用算法与数据结构,一题多解,降维打击。
题目描述
[1791] 找出星型图的中心节点
https://leetcode-cn.com/problems/find-center-of-star-graph/
题目描述
有一个无向的 星型 图,由 n 个编号从 1 到 n 的节点组成。星型图有一个 中心 节点,并且恰有 n - 1 条边将中心节点与其他每个节点连接起来。
给你一个二维整数数组 edges ,其中 edges[i] = [ui, vi] 表示在节点 ui 和 vi 之间存在一条边。请你找出并返回 edges 所表示星型图的中心节点。
示例 1:
输入:edges = [[1,2],[2,3],[4,2]]
输出:2
解释:如上图所示,节点 2 与其他每个节点都相连,所以节点 2 是中心节点。
示例 2:
输入:edges = [[1,2],[5,1],[1,3],[1,4]]
输出:1
提示:
3 <= n <= 105
edges.length == n - 1
edges[i].length == 2
1 <= ui, vi <= n
ui != vi
题目数据给出的 edges 表示一个有效的星型图
Related Topics
- 枚举
- 图
- 树
题目剖析&信息挖掘
此题为规律题,通过树的特性,找到中心点的特性。
解题思路
方法一 枚举
解析
由题意可知,题目一定有解,中心点一定与其他点有边,所以中心点的度为n-1。
思路
func findCenter(edges [][]int) int {
du []int
for _, e :=range edges {
//统计结点的度
}
ans :=1
for i:=1;i<=n;i++ {
// 查找度为n-1的结点, 返回
}
return ans // 一定有答案
}
注意
- 题目一定有答案。
知识点
- 枚举
复杂度
- 时间复杂度:O(n)
- 空间复杂度:O(1)
代码实现
func findCenter(edges [][]int) int {
n := len(edges) + 1
du := make([]int, len(edges)+10)
for _, e := range edges {
//统计结点的度
du[e[0]]++
du[e[1]]++
}
for i := 1; i <= n; i++ {
if du[i] == n-1 {
return i // 查找度为n-1的结点, 返回
}
}
return -1 // 一定有答案,不会运行到这里
}
本人码农,希望通过自己的分享,让大家更容易学懂计算机知识。