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

这篇博客讨论了如何解决LeetCode上的一道题目,即在一个无向的星型图中找到中心节点。星型图有一个中心节点,通过n-1条边与其余节点相连。解题思路包括两种方法:一是利用哈希表统计每个节点的连接次数,找出被连接最多的节点;二是直接比较前两条边,找出它们共有的节点。这两种方法的时间复杂度和空间复杂度分别进行了分析。
摘要由CSDN通过智能技术生成

难度:简单

目录

一、问题描述

二、思路

1、解题思路

1.思路一

2.方法二

三、解题

1、代码实现

1.方法一

2.方法二

2、时间复杂度 and 空间复杂度

1.方法一

2.方法二


一、问题描述

这里直接采用LeetCode上面的描述。

        有一个无向的 星型 图,由 n 个编号从 1n 的节点组成。星型图有一个 中心 节点,并且恰有 n - 1 条边将中心节点与其他每个节点连接起来。

        给你一个二维整数数组 edges ,其中 edges[i] = [ui, vi] 表示在节点 uivi 之间存在一条边。请你找出并返回 edges 所表示星型图的中心节点。

下面给出示例:

提示:

  • 3 <= n <= 105
  • edges.length == n - 1
  • edges[i].length == 2
  • 1 <= ui, vi <= n
  • ui != vi
  • 题目数据给出的 edges 表示一个有效的星型图

        

二、思路

1、解题思路

1.思路一

        观察 无向星型图 可以看出来每条边都会连接相同的一个节点 这个节点就是 中心节点,所以我们只需要统计所有边连接的节点的个数,被最多边连接的节点就是 中心节点。采用哈希表遍历所有边并统计连接节点的个数,再遍历哈希表找出最多的节点即为中心节点。

 

2.方法二

       可以观察到,每个边都连接一个相同的节点,所以我们只需要判断刚开始的两条边找出其连接的相同的节点,该节点即为中心节点。

三、解题

1、代码实现

1.方法一

class Solution {
public:
    int findCenter(vector<vector<int>>& edges) {
        unordered_map<int,int> hashTable;
        for(auto& item : edges){
            hashTable[item[0]]++;
            hashTable[item[1]]++;
        }
        pair<int,int> ans{0,0};
        for(auto& item : hashTable){
            if(item.second > ans.second){
                ans = item;
            }
        }
        return ans.first;
    }
};

 

2.方法二

class Solution {
public:
    int findCenter(vector<vector<int>>& edges) {
        return edges[0][0] == edges[1][0] || edges[0][0] == edges[1][1] ? edges[0][0] : edges[0][1]; 
    }
};

 

 

2、时间复杂度 and 空间复杂度

1.方法一

时间复杂度:O(n)

空间复杂度:O(n) 

2.方法二

时间复杂度:O(1)

空间复杂度:O(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Alkaid_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值