【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 ] edges[i] = [u_i, v_i] edges[i]=[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 edges[i].length == 2 edges[i].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语言版

相关推荐
一水鉴天14 小时前
整体设计 逻辑系统程序 之34七层网络的中台架构设计及链路对应讨论(含 CFR 规则与理 / 事代理界定)
人工智能·算法·公共逻辑
DuHz14 小时前
C程序中的数组与指针共生关系
linux·c语言·开发语言·嵌入式硬件·算法
而后笑面对14 小时前
力扣2025.10.19每日一题
算法·leetcode·职场和发展
·白小白14 小时前
力扣(LeetCode) ——11.盛水最多的容器(C++)
c++·算法·leetcode
沐浴露z16 小时前
【JVM】详解 垃圾回收
java·jvm·算法
代码欢乐豆16 小时前
编译原理机测客观题(7)优化和代码生成练习题
数据结构·算法·编译原理
祁同伟.17 小时前
【C++】二叉搜索树(图码详解)
开发语言·数据结构·c++·容器·stl
Scc_hy17 小时前
强化学习_Paper_2000_Eligibility Traces for Off-Policy Policy Evaluation
人工智能·深度学习·算法·强化学习·rl
Joy T17 小时前
Solidity智能合约存储与数据结构精要
数据结构·区块链·密码学·智能合约·solidity·合约function
leke200318 小时前
2025年10月17日
算法