Welcome to Subscribe On Youtube

Formatted question description: https://leetcode.ca/all/1791.html

1791. Find Center of Star Graph

Level

Medium

Description

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] = [u_i, v_i] indicates that there is an edge between the nodes u_i and v_i. Return the center of the given star graph.

Example 1:

Image text

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 <= 10^5
  • edges.length == n - 1
  • edges[i].length == 2
  • 1 <= u_i, v_i <= n
  • u_i != v_i
  • The given edges represent a valid star graph.

Solution

The given star graph is actually a tree, with n nodes and n - 1 edges. The center of the star graph has n - 1 edges connected to it, and each of the remaining nodes has 1 edge connected to it. Simply calculate the number of edges connected to each node, and return the node that has more than 1 edge connected to it.

  • class Solution {
        public int findCenter(int[][] edges) {
            int n = edges.length + 1;
            int[] connections = new int[n + 1];
            for (int[] edge : edges) {
                int node1 = edge[0], node2 = edge[1];
                connections[node1]++;
                connections[node2]++;
                if (connections[node1] > 1)
                    return node1;
                else if (connections[node2] > 1)
                    return node2;
            }
            return 0;
        }
    }
    
    ############
    
    class Solution {
        public int findCenter(int[][] edges) {
            int a = edges[0][0], b = edges[0][1];
            int c = edges[1][0], d = edges[1][1];
            return a == c || a == d ? a : b;
        }
    }
    
  • // OJ: https://leetcode.com/problems/find-center-of-star-graph/
    // Time: O(1)
    // Space: O(1)
    class Solution {
    public:
        int findCenter(vector<vector<int>>& E) {
            return E[0][0] == E[1][0] || E[0][0] == E[1][1] ? E[0][0] : E[0][1];
        }
    };
    
  • class Solution:
        def findCenter(self, edges: List[List[int]]) -> int:
            return edges[0][0] if edges[0][0] in edges[1] else edges[0][1]
    
    ############
    
    # 1791. Find Center of Star Graph
    # https://leetcode.com/problems/find-center-of-star-graph/
    
    class Solution:
        def findCenter(self, edges: List[List[int]]) -> int:
            n = len(edges)
            mp = collections.defaultdict(int)
            
            for a,b in edges:
                mp[a] += 1
                mp[b] += 1
            
            for key in mp:
                if mp[key] == n:
                    return key
            
            return -1
            
    
    
  • func findCenter(edges [][]int) int {
    	a, b := edges[0][0], edges[0][1]
    	c, d := edges[1][0], edges[1][1]
    	if a == c || a == d {
    		return a
    	}
    	return b
    }
    
  • function findCenter(edges: number[][]): number {
        for (let num of edges[0]) {
            if (edges[1].includes(num)) {
                return num;
            }
        }
    }
    
    
  • /**
     * @param {number[][]} edges
     * @return {number}
     */
    var findCenter = function (edges) {
        const [a, b] = edges[0];
        const [c, d] = edges[1];
        return a == c || a == d ? a : b;
    };
    
    
  • impl Solution {
        pub fn find_center(edges: Vec<Vec<i32>>) -> i32 {
            if edges[0][0] == edges[1][0] || edges[0][0] == edges[1][1] {
                return edges[0][0];
            }
            edges[0][1]
        }
    }
    
    

All Problems

All Solutions