There is an undirected star graph consisting of n nodes labeled from 1 to n. A star graph is a graph where there is one center node and exactly n - 1 edges that connect the center node with every other node.

You are given a 2D integer array edges where each edges[i] = [ui, vi] indicates that there is an edge between the nodes ui and vi. Return the center of the given star graph.

 

Example 1:


Input: edges = [[1,2],[2,3],[4,2]]
Output: 2
Explanation: As shown in the figure above, node 2 is connected to every other node, so 2 is the center.
Example 2:

Input: edges = [[1,2],[5,1],[1,3],[1,4]]
Output: 1
 

Constraints:

3 <= n <= 105
edges.length == n - 1
edges[i].length == 2
1 <= ui, vi <= n
ui != vi
The given edges represent a valid star graph.

这题主要找规律,只要有一个数字出现两次必定是中心节点。时间复杂度最低的算法应该是直接4个if-else,这里就不这样写了

class Solution {
public:
    int findCenter(vector<vector<int>>& edges) {
        std::set<int> nodes;
        for (size_t i = 0; i < 2; i++) {
            for (auto v : edges[i]) {
                if (nodes.count(v) != 0) {
                    return v;
                }
                nodes.insert(v);
            }
        }
        return -1;
    }
};
共 0 条回复
暂时没有人回复哦,赶紧抢沙发
发表新回复

作者

sryan
today is a good day