【刷题日记】2039. 网络空闲的时刻

简介: 本次刷题日记的第 9 篇,力扣题为:2039. 网络空闲的时刻 ,中等

【刷题日记】2039. 网络空闲的时刻

本次刷题日记的第 9 篇,力扣题为:2039. 网络空闲的时刻中等

一、题目描述:

image.png

乍看今天的这道题,有点要被劝退的感觉 !!  xdm 有这种感受吗

但是为了提高我们自己的能力,我们还是有这个耐心来将题目看完的,并且会找出其中的重点信息

二、思路分析:

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

这道题具体需要如何去实现呢,我们可以来分析一下,题中给我们展示了哪些有用的信息

  • 题目会给出多个服务器,从  0 到 n -1 个服务器编号,且 0 是主服务器其他的服务器都会向 主服务器发送消息主服务器也会原路回应消息
  • 节点和节点之间,能够在 1 秒钟将所有信息全部发送完毕
  • 每个服务器和服务器之间都是可以通过某个路径进行通信的,但是题目要求的是最小路径 , 且服务器和服务器之间,顶多有 1 条信息线,不会出现两个节点之间有 2 条甚至更多的信息线
  • 题目中还提供一个数组,来表示对应服务器发送信息出去后的超时重发时间,如果在指定时间内服务器收到了主服务器 0 的回包,那么就不重发,否则就重发
  • 最后我们需要计算网络变空闲的最早时刻,那就意味着,网络中每一个节点都要是空闲的才行,此刻计算最晚空闲下来的节点时间,就是整个网络的最早空闲时间
    毕竟整体的结果,是团队内每一个人努力付出的结果

那么,根据题中的示例,我们可以来分析和推演一下:

edges = [[0,1],[1,2]], patience = [0,2,1] 为例

image.png

通过上图,我们需要分清楚有 2 种情况,那就是该节点从发包到收到包的时间是小于超时时间 p(2t <= p ),那么就不会重发,总共耗时 就是  2t 秒,第 2t + 1 秒就是空闲的

只有当发第一个包到收到的时间大于超时时间 p 的时候(2t > p),才会重发,总共耗时 p *((2t -1) / p) + 2t ,最终 p *((2t -1) / p) + 2t + 1  秒开始空闲

那么已经知道如何计算网络的最晚空闲时间的数学原理之后,我们就可以看看这个题的最短路径问题了

最短路径,详细分析就不做赘述了,对于之后的最短路径的题再一起来推理,暂时我们可以理解,先把节点和节点的连接关系表示出来,如下:

image.png

接下来,我们直接可以使用 广度优先算法 BFS 来计算最短路径了

2、尝试编码

根据上述逻辑和分析,我们就可以翻译成如下代码

编码如下:

func networkBecomesIdle(edges [][]int, p []int) (ans int) {
    n := len(p)
    g := make([][]int, n)
    // 先找到节点和节点之间的连接关系,如上述的案例,此处就能得到
    //g[0] = [1]    -- 表示 0 这个节点可以连接  1 节点
  //g[1] = [0,2] -- 表示 1 这个节点,可以连接 0节点, 和 2 节点
  //g[2] = [1]    -- 表示 2 这个节点,可以连接 1 节点
    for _, e := range edges {
        x, y := e[0], e[1]
        g[x] = append(g[x], y)
        g[y] = append(g[y], x)
    }
    vis := make([]bool, n)
    vis[0] = true
    q := []int{0}
    // 通过 bfs 的方式来来计算最短路径
    for t := 1; q != nil; t++ {
        tmp := q
        q = nil
        for _, x := range tmp {
            for _, v := range g[x] {
                if vis[v] {
                    continue
                }
                vis[v] = true
                q = append(q, v)
                // 计算最晚空闲时间
                ans = max(ans, (t*2-1)/p[v] * p[v] + t*2 +1)
            }
        }
    }
    return
}
func max(a, b int) int {
    if b > a {
        return b
    }
    return a
}

通过上述代码,我们知道主要逻辑是:

  • 找到节点和节点间的连接关系
  • 通过 bfs 广度优先算法,计算节点到 主节点 0 的最短距离,并计算该节点的最晚空闲时间
  • 最终取,数值最大的最晚空闲时间为整个网络的最早空闲时间

四、总结:

整个题,需要弄清楚整个网络的最早空闲时间是依赖于节点的最晚空闲时间,需要处理好超时重传的时间问题

本题的时间复杂度和空间复杂度为 :O(n+m)

原题地址:2039. 网络空闲的时刻

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

欢迎点赞,关注,收藏

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

image.png

好了,本次就到这里

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

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


相关文章
|
算法
[leetcode] 2039. 网络空闲的时刻 | BFS
题意: 给定一张n个点不含重边的无向图,点的编号从0开始到n-1,两点之间如果有连边,可以认为耗时为1秒 1->n-1的点都需要向0号点发送消息(从第0秒开始) 在0号收到消息之后,会回复消息; 从第一秒开始,如果1->n-1号服务器经过patiennce[]时间都还没有收到回复的消息,那么就会重新发送请求的消息 问最早的网络中没有消息传输的时间是什么时候
103 0
[leetcode] 2039. 网络空闲的时刻 | BFS
|
机器学习/深度学习
2039. 网络空闲的时刻 : 简单「建图 + BFS」运用题
2039. 网络空闲的时刻 : 简单「建图 + BFS」运用题
LeetCode 2039. 网络空闲的时刻(BFS)
LeetCode 2039. 网络空闲的时刻(BFS)
168 0
LeetCode 2039. 网络空闲的时刻(BFS)
|
17天前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
58 17
|
27天前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
|
28天前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
47 10
|
30天前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的内容,并提供一些实用的代码示例。通过阅读本文,您将了解到如何保护自己的网络安全,以及如何提高自己的信息安全意识。
59 10
|
30天前
|
存储 监控 安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的融合与挑战
本文将探讨云计算与网络安全之间的关系,以及它们在云服务、网络安全和信息安全等技术领域中的融合与挑战。我们将分析云计算的优势和风险,以及如何通过网络安全措施来保护数据和应用程序。我们还将讨论如何确保云服务的可用性和可靠性,以及如何处理网络攻击和数据泄露等问题。最后,我们将提供一些关于如何在云计算环境中实现网络安全的建议和最佳实践。
|
1月前
|
监控 安全 网络安全
网络安全与信息安全:漏洞、加密与意识的交织
在数字时代的浪潮中,网络安全与信息安全成为维护数据完整性、保密性和可用性的关键。本文深入探讨了网络安全中的漏洞概念、加密技术的应用以及提升安全意识的重要性。通过实际案例分析,揭示了网络攻击的常见模式和防御策略,强调了教育和技术并重的安全理念。旨在为读者提供一套全面的网络安全知识框架,从而在日益复杂的网络环境中保护个人和组织的资产安全。

热门文章

最新文章