Center of a Graph, in O(N)-time
Problem is actually not that hard (the acceptance rate is close to 90%), here it is: Find Center of Star Graph - LeetCode
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.
Basically it boils down to one simple task: find the node with the most number of connections. That's it. Scan the edges and keep the count of connections either in a hash table or a bucket-array (I used the latter). Keep track of the max. Done. Code is below, cheers, ACC.
public int FindCenter(int[][] edges) { int[] nodes = new int[100001]; int max = 0; int retVal = 0; for (int i = 0; i < edges.Length; i++) { for (int j = 0; j < 2; j++) { nodes[edges[i][j]]++; if(nodes[edges[i][j]] > max) { max = nodes[edges[i][j]]; retVal = edges[i][j]; } } } return retVal; }
Comments
Post a Comment