【LeetCode每日一题】——1791.找出星型图的中心节点

文章目录

一【题目类别】

二【题目难度】

  • 简单

三【题目编号】

  • 1791.找出星型图的中心节点

四【题目描述】

  • 有一个无向的 星型 图,由 n n n 个编号从 1 1 1 到 n n n 的节点组成。星型图有一个 中心 节点,并且恰有 n − 1 n - 1 n−1 条边将中心节点与其他每个节点连接起来。
  • 给你一个二维整数数组 e d g e s edges edges ,其中 e d g e s i = u i , v i edgesi = u_i, v_i edgesi=ui,vi 表示在节点 u i u_i ui 和 v i v_i vi 之间存在一条边。请你找出并返回 e d g e s edges 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 < = 1 0 5 3 <= n <= 10^5 3<=n<=105
  • e d g e s . l e n g t h = = n − 1 edges.length == n - 1 edges.length==n−1
  • e d g e s i . l e n g t h = = 2 edgesi.length == 2 edgesi.length==2
  • 1 < = u i , v i < = n 1 <= u_i, v_i <= n 1<=ui,vi<=n
  • u i ! = v i u_i != v_i ui!=vi
  • 题目数据给出的 e d g e s edges edges 表示一个有效的星型图

七【解题思路】

  • 该题需要利用图的基本性质,即度的概念
  • 根据题意,"星型图"的中心节点连接其余n - 1个节点
  • 所以"星型图"的中心节点的度为n - 1
  • 故只需要计算每个节点的度,度为n - 1的节点即为"星型图"的中心节点
  • 具体细节可以参考下面的代码
  • 最后返回结果即可

八【时空频度】

  • 时间复杂度: O ( n ) O(n) O(n), n n n为图中的节点数量
  • 空间复杂度: O ( n ) O(n) O(n), n n n为图中的节点数量

九【代码实现】

  1. Java语言版
java 复制代码
class Solution {
    public int findCenter(int[][] edges) {
        // 获取节点数量
        int n = edges.length + 1;
        // 初始化数组,表示图中节点的度
        int[] degrees = new int[n + 1];
        // 计算图中每个节点的度
        for (int i = 0; i < edges.length; i++) {
            degrees[edges[i][0]]++;
            degrees[edges[i][1]]++;
        }
        // 若某个节点的度=节点数量-1,其即为星型图的中心节点
        for (int i = 1; i < degrees.length; i++) {
            if (degrees[i] == n - 1) {
                return i;
            }
        }
        return -1;
    }
}
  1. Python语言版
python 复制代码
class Solution:
    def findCenter(self, edges: List[List[int]]) -> int:
        # 获取节点数量
        n = len(edges) + 1
        # 初始化数组,表示图中节点的度
        degrees = [0] * (n + 1)
        # 计算图中每个节点的度
        for x, y in edges:
            degrees[x] += 1
            degrees[y] += 1
        # 若某个节点的度=节点数量-1,其即为星型图的中心节点
        for index, degree in enumerate(degrees):
            if degree == n - 1:
                return index
  1. C语言版
c 复制代码
int findCenter(int** edges, int edgesSize, int* edgesColSize)
{
    // 获取节点数量
    int n = edgesSize + 1;
    // 初始化数组,表示图中节点的度
    int* degrees = (int*)malloc(sizeof(int) * (n + 1));
    memset(degrees, 0, (n + 1) * sizeof(int));
    // 计算图中每个节点的度
    for (int i = 0; i < edgesSize; i++)
    {
        degrees[edges[i][0]]++;
        degrees[edges[i][1]]++;
    }
    // 若某个节点的度=节点数量-1,其即为星型图的中心节点
    for (int i = 0; i < (n + 1); i++)
    {
        if (degrees[i] == (n - 1))
        {
            return i;
        }
    }
    return -1;
}

十【提交结果】

  1. Java语言版

  2. Python语言版

  3. C语言版

相关推荐
Jerry1 小时前
LeetCode 28. 找出字符串中第一个匹配项的下标
算法
Jerry3 小时前
LeetCode 459. 重复的子字符串
算法
海石6 小时前
1500分的题目,确实有实力,不过还是我略胜一筹
算法·leetcode
海石6 小时前
【记忆化搜索】条条大路通AC,走好适合你的那一条,走到后再考虑走得快
算法·leetcode
Jerry8 小时前
LeetCode 151. 反转字符串中的单词
算法
gugucoding8 小时前
31. 【C语言】堆栈与队列的实现
c语言·开发语言·数据结构·链表
ChaoZiLL10 小时前
我的数据结构3——链表(link list)
数据结构·链表
a11177610 小时前
LM 算法迭代过程动画演示(SLAM)
算法
头茬韭菜10 小时前
Context 的生死抉择:四层压缩、截断算法与 Session Memory
算法·ai
Jerry10 小时前
LeetCode 541. 反转字符串 II
算法