【刷题日记】1791. 找出星型图的中心节点

简介: 昨天加班比较晚来不及刷每日一题,今天加班也回来晚了点,但是看到是一个简单的图,那么还是刷刷吧

【刷题日记】1791. 找出星型图的中心节点

本次刷题日记的第 26 篇,力扣题为:【刷题日记】1791. 找出星型图的中心节点简单

一、题目描述:


昨天加班比较晚来不及刷每日一题,今天加班也回来晚了点,但是看到是一个简单的图,那么还是刷刷吧

image.png

据我所知,我身边的朋友都不会刷图相关的题,原因是因为面试不会考图,因为涉及图的题目编码量也会相对较大

但是我认为学会学好了图,其实在生活中能够解决很多问题,例如 城市最短近距离等等

咱们还是来认真看看题目

二、这道题考察了什么思想?你的思路是什么?

仔细看这道题,给我们透露了哪些重要的信息呢:

  • 这是一个无向图,节点和节点之后是没有箭头的,没有入度和出度一说
  • 无向图组成的图形是一个星型,意味着节点的数量总是比边的数量大 1 ,如果节点数量为 n,那么边的数量就为 n-1 , 反过来也一样
  • 通过题目给出的边的关系,我们找出中心节点

得到如上重要信息之后,我们可以思考一下,**在上述的情况中,什么才叫做中心节点呢?**我们可以如何用数字化的方式来进行定义呢?

咱们举一个例子来看看效果:

例如下面的这个星型图:

image.png

总共是 6 个节点, 5 条边 ,我们可以发现这 5 条边都会连接到中心节点,那么我们就不难想到节点的度,当然如果没有图论基础的话,可以去补充一下

简单理解就是,对于无向图,有多少个边某一节点连接,那么这个节点的度就是 边的个数

那么,基于上图,我们就知道

  • 4 节点的度是 5
  • 1 , 2, 3, 5, 6 节点的度都是 1

通过数据我们其实也明确了,我们只要找到一个节点的度,是等于边的条数的,那么就可以实现这个题解了


好,那么接下来就是将上述思路,进行翻译了

三、编码

根据上述逻辑和分析,我们就可以翻译成如下代码,翻译代码的时候需要注意我们计算节点度的方式,以及空间的开辟

编码如下:

func findCenter(edges [][]int) int {
    // 得到节点的数量,等于边的数量 + 1
    length := len(edges) + 1
    // 此处开辟的空间是 length+1 , 是因为节点的数字不是从 0 开始的,而是从 1 开始的
    g := make([]int,length+1)
    // 计算每一个节点的 度
    for _,e := range edges {
        g[e[0]]++
        g[e[1]]++
    }
    // 找到节点度为 节点数 -1 的节点,则这个节点就是中心节点
    for i,num := range g {
        if num == length-1{
            return i
        }
    }
    return -1
}

看了上述代码,我们需要注意在开辟空间存储节点对应的度的时候,咱们的索引是从 1 开始的,例如如果有 4 个节点的话,那么我们的开辟的帮助空间是 4 + 1

四、总结:

很明显,这里我们可以看出来时间复杂度是 O(n),因为需要遍历每一个节点,来判断节点的度是否符合我们的要求

空间复杂度也是  O(n) ,因为我们需要开辟节点个数 + 1 的帮助空间

原题地址:1791. 找出星型图的中心节点

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~


相关文章
|
4月前
|
缓存
【项目日记(五)】第二层: 中心缓存的具体实现(上)
【项目日记(五)】第二层: 中心缓存的具体实现(上)
|
4月前
|
存储 缓存
【项目日记(六)】第二层: 中心缓存的具体实现(下)
【项目日记(六)】第二层: 中心缓存的具体实现(下)
|
4月前
leetcode-1791:找出星型图的中心节点
leetcode-1791:找出星型图的中心节点
30 0
leetcode-1791:找出星型图的中心节点
|
4月前
|
NoSQL 算法 Java
仅靠七个步骤,4面通过拿offer,终“跳进”字节跳动
5年前,BAT冲到了风口浪尖,美国上市的阿里成为中国体量最大的互联网公司,腾讯借助微信成为移动互联网的霸主,外企开始撤离中国,国企的光环也慢慢褪去。
|
前端开发
前端学习笔记202304学习笔记第八天-web前端学习-数据流转关系图1
前端学习笔记202304学习笔记第八天-web前端学习-数据流转关系图1
180 0
|
前端开发
前端学习笔记202304学习笔记第八天-web前端学习-数据流转关系图2
前端学习笔记202304学习笔记第八天-web前端学习-数据流转关系图2
165 0
LeetCode 1791. 找出星型图的中心节点
有一个无向的 星型 图,由 n 个编号从 1 到 n 的节点组成。星型图有一个 中心 节点,并且恰有 n - 1 条边将中心节点与其他每个节点连接起来。
80 0
|
Rust 自然语言处理 算法
【算法】1791. 找出星型图的中心节点(多语言实现)
有一个无向的 星型 图,由 n 个编号从 1 到 n 的节点组成。星型图有一个 中心 节点,并且恰有 n - 1 条边将中心节点与其他每个节点连接起来。 给你一个二维整数数组 edges ,其中 edges[i] = [ui, vi] 表示在节点 ui 和 vi 之间存在一条边。请你找出并返回 edges 所表示星型图的中心节点。
【算法】1791. 找出星型图的中心节点(多语言实现)
|
机器学习/深度学习 算法
LeetCode每日一题——882. 细分图中的可到达节点
给你一个无向图(原始图),图中有 n 个节点,编号从 0 到 n - 1 。你决定将图中的每条边 细分 为一条节点链,每条边之间的新节点数各不相同。
87 0
LeetCode每日一题——882. 细分图中的可到达节点
|
机器学习/深度学习
1791. 找出星型图的中心节点 : 简单模拟题(进阶到欧拉回路问题)
1791. 找出星型图的中心节点 : 简单模拟题(进阶到欧拉回路问题)