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

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

题目来源:1791. 找出星型图的中心节点

2022.02.18 每日一题

每日一题专栏地址:LeetCode 每日一题题解更新中❤️💕

今天的题目就很简单啦,就是寻找星型图的度数就好啦~

具体的方法以及代码如下

法一:寻找度最大的值

从题意之中了解到并且恰有 n - 1 条边将中心节点与其他每个节点连接起来。则说明,除了中心节点的度是n-1以外,其余的节点的度都为 1,因此可以建立一个哈希表来统计所有节点的度,最后返回节点度数不为1的(节点数为n-1的节点),这个节点就是星型的中心

class Solution {
public:
    int findCenter(vector<vector<int>>& edges) {
        // 建立哈希表统计各个节点的度数
        unordered_map<int,int>cnt;
        // 统计各个节点的度数
        for(vector<int>&edge:edges) {
            cnt[edge[0]]++;
            cnt[edge[1]]++;
        }
        // 遍历哈希表找到节点度数不为 1 的(节点数为 n-1 的节点)
        for(auto&[p,c]:cnt)
            if(c!=1) return p;
        return 0;
    }
};
class Solution {
    public int findCenter(int[][] edges) {
        // 建立哈希表统计各个节点的度数
        Map<Integer, Integer> cnt = new HashMap<>();
        // 统计各个节点的度数
        for (int[] edge : edges) {
            cnt.put(edge[0], cnt.getOrDefault(edge[0], 0) + 1);
            cnt.put(edge[1], cnt.getOrDefault(edge[1], 0) + 1);
        }
        // 遍历哈希表找到节点度数不为 1 的(节点数为 n-1 的节点)
        for (Map.Entry<Integer, Integer> entry : cnt.entrySet())
            if (entry.getValue() != 1) return entry.getKey();
        return 0;
    }
}

优化

既然寻找度最大的值,这是一个星型的形状,除了中心的点以外,所有的点的度都是 1

因此,只需要判断 edges 数组前两个内容中重复出现的值即可,不像法一中占用那么大的时间以及空间,既简单又粗暴

为了阅读方便我将代码运行顺序用括号括起来了❤️

class Solution
{
public:
    int findCenter(vector<vector<int>>& edges)
    {
        return ((edges[0][0]==edges[1][0])||(edges[0][1]==edges[1][0]))?edges[1][0]:edges[1][1];
    }
};
class Solution {
    public int findCenter(int[][] edges) {
		return ((edges[0][0]==edges[1][0])||(edges[0][1]==edges[1][0]))?edges[1][0]:edges[1][1];
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值