难度:简单
目录
一、问题描述
这里直接采用LeetCode上面的描述。
有一个无向的 星型 图,由 n
个编号从 1
到 n
的节点组成。星型图有一个 中心 节点,并且恰有 n - 1
条边将中心节点与其他每个节点连接起来。
给你一个二维整数数组 edges ,其中 edges[i] = [ui, vi] 表示在节点 ui 和 vi 之间存在一条边。请你找出并返回 edges 所表示星型图的中心节点。
下面给出示例:
提示:
- 3 <= n <= 105
- edges.length == n - 1
- edges[i].length == 2
- 1 <= ui, vi <= n
- ui != vi
- 题目数据给出的 edges 表示一个有效的星型图
二、思路
1、解题思路
1.思路一
观察 无向星型图 可以看出来每条边都会连接相同的一个节点 这个节点就是 中心节点,所以我们只需要统计所有边连接的节点的个数,被最多边连接的节点就是 中心节点。采用哈希表遍历所有边并统计连接节点的个数,再遍历哈希表找出最多的节点即为中心节点。
2.方法二
可以观察到,每个边都连接一个相同的节点,所以我们只需要判断刚开始的两条边找出其连接的相同的节点,该节点即为中心节点。
三、解题
1、代码实现
1.方法一
class Solution {
public:
int findCenter(vector<vector<int>>& edges) {
unordered_map<int,int> hashTable;
for(auto& item : edges){
hashTable[item[0]]++;
hashTable[item[1]]++;
}
pair<int,int> ans{0,0};
for(auto& item : hashTable){
if(item.second > ans.second){
ans = item;
}
}
return ans.first;
}
};
2.方法二
class Solution {
public:
int findCenter(vector<vector<int>>& edges) {
return edges[0][0] == edges[1][0] || edges[0][0] == edges[1][1] ? edges[0][0] : edges[0][1];
}
};
2、时间复杂度 and 空间复杂度
1.方法一
时间复杂度:
空间复杂度:
2.方法二
时间复杂度:
空间复杂度: