学习记录:js算法(一百一十九):网络延迟时间

文章目录

    • 网络延迟时间
      • 思路一

网络延迟时间

有 n 个网络节点,标记为 1 到 n。
给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i] = (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信号从源节点传递到目标节点的时间。
现在,从某个节点 K 发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1 。

图一:
在这里插入图片描述

示例 1:图一
输入:times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2
输出:2示例 2:
输入:times = [[1,2,1]], n = 2, k = 1
输出:1示例 3:
输入:times = [[1,2,1]], n = 2, k = 2
输出:-1

思路一

function networkDelayTime(times, N, K) {const graph = Array.from({length: N}, () => []);const dist = Array(N).fill(Infinity);dist[K - 1] = 0; // 节点编号从1开始,数组索引从0开始const pq = []; // 优先级队列,存放待访问的节点// 构建邻接表for (const [u, v, w] of times) {graph[u - 1].push([v - 1, w]);}// 初始化优先级队列pq.push([0, K - 1]); // [distance, node]while (pq.length > 0) {pq.sort((a, b) => a[0] - b[0]); // 每次取最小距离的节点const [d, u] = pq.shift();if (d > dist[u]) continue; // 如果当前节点已经更新过距离,跳过for (const [v, w] of graph[u]) {if (dist[v] > dist[u] + w) {dist[v] = dist[u] + w;pq.push([dist[v], v]);}}}const maxDist = Math.max(...dist);return maxDist === Infinity ? -1 : maxDist;
}

讲解
这个问题可以通过最短路径算法来解决,具体来说,可以使用Bellman-Ford算法或者Dijkstra算法的变种。但是,由于图是有向图并且没有负权重边,Dijkstra算法会更高效一些。

  1. 初始化距离数组:创建一个数组dist,其长度等于节点的数量,用来存储从起始节点K到每个节点的最短距离。将dist[K]设为0,表示从K到自身的距离为0,其他节点的距离初值设为Infinity,表示初始时距离未知。
  2. 构建邻接表:遍历times数组,将边的信息构建成邻接表,这样可以方便地查找从一个节点出发的所有可能的下一站点及对应的权重。
  3. 使用Dijkstra算法:从起始节点K开始,使用优先级队列(最小堆)来保存待访问的节点,每次从队列中取出具有最小距离的节点,更新其邻居的距离,如果更新后的距离小于之前的记录,则更新距离,并将该邻居加入到队列中等待处理。
  4. 检查是否所有节点都可达:最后检查dist数组中是否有节点的距离仍然保持为Infinity,如果有,说明存在节点无法到达,返回-1;否则,返回dist数组中的最大值,这代表了信号到达最远节点所花费的时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/488445.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式硬件-- 元器件焊接

1.锡膏的使用 锡膏要保存在冰箱里。 焊接排线端子;138度的低温锡(锡膏), 第一次使用,直接拿东西挑一点涂在引脚上,不知道多少合适,加热台加热到260左右,放在上面观察锡融化&#…

Cocos Creator 开发微信小游戏分包

作为以后端选手,吭哧吭哧的好不容易用cocos开发了一款小游戏, 上传的时候发现包太大了,主包超过4M; 我不是选小游戏分包了吗? 怎么还超? 分包的方案: 功能裁剪资源压缩主包迁移WASM分离 1. 功能裁剪 项目设置中引擎管理器中 功能裁剪里面有很多个引擎,我们剔除掉没用的引…

华为eNSP实验:VRRP基本配置

VRRP(Virtual Router Redundancy Protocol)是一种网络冗余协议,旨在提高网络的可靠性和容错能力。VRRP通过把几台路由设备联合组成一台虚拟的路由设备,将虚拟路由设备的IP地址作为用户的默认网关实现与外部网络通信。 实验拓扑&a…

axi can ip相关笔记

1,can_clk最大24m,最后用的24m 2,axi总线不超过100m,且大于can_clk,最后用的100m 结构如下: 3,axi can ip需要专门的license,否则会导致不能生成bitstream 4,编…

单臂路由配置

知识点 单臂路由指在路由器上的一个接口配置子接口(逻辑接口)来实现不同vlan间通信 路由器上的每个物理接口都可以配置多个子接口(逻辑接口) 公司的财务部、技术部和业务部有多台计算机,它们使用一台二层交换机进行互…

STM32F103单片机使用STM32CubeMX创建IAR串口工程

打开stm32cubeMX,选择新建工程 输入单片机型号,在下面选中具体型号,然后点右上角 开始工程 第一步设置 调试接口,否则生成的工程就会下载不到单片机中,使用stlink或者jlink的话,在debug选项中直接选择ser…

【笔记】分布式任务调度平台XXL-JOB

这篇笔记主要记录以下内容: (1)第一次启动xxl-job的过程 (2)模块、文件、数据库(表和字段)的作用 (3)极少的源码解读(XxlJobConfig) 有点像实…

hbuilder 安卓app手机调试中基座如何设置

app端使用基座 手机在线预览功能 1.点击运行 2.点击运行到手机或者模拟器 3.制作自定义调试基座 4.先生成证书【可以看我上一篇文档写的有】,点击打包 5.打包出android自定义调试基座【android_debug.apk】,【就跟app打包一样需要等个几分钟】 6.点击运行到手…

uniapp中父组件传参到子组件页面渲染不生效问题处理实战记录

上篇文件介绍了,父组件数据更新正常但是页面渲染不生效的问题,详情可以看下:uniapp中父组件数组更新后与页面渲染数组不一致实战记录 本文在此基础上由于新增需求衍生出新的问题.本文只记录一下解决思路. 下面说下新增需求方便理解场景: 商品信息设置中添加抽奖概率设置…

零基础学安全--Burp Suite验证码识别以及爆破

目录 学习连接 本次文章直接以例子来讲解 正式开始 插件安装 抓取验证码脚本下载 识别验证码脚本下载 将插件导入到BP中 开始识别 目标寻找 验证码连接获取 运行.pyt文件 BP抓取加载验证码的数据包,就是如下数据包观察以下和那个验证码连接​编辑 将包发…

js面试题|[2024-12-10]

1.延迟加载JS有哪些方式&#xff1f; 延迟加载&#xff1a;async、defer 例如&#xff1a;<script defer type"text/javascript" srcscript.js></script> defer&#xff1a;等html全部解析完毕&#xff0c;才会执行js代码&#xff0c;顺次执行js脚本 asy…

朗新科技集团如何用云消息队列 RocketMQ 版“快、准、狠”破解业务难题?

作者&#xff1a;邹星宇、刘尧 朗新科技集团&#xff1a;让数字化的世界更美好 朗新科技集团股份有限公司是领先的能源科技企业&#xff0c;长期深耕电力能源领域&#xff0c;通过新一代数字化、人工智能、物联网、电力电子技术等新质生产力&#xff0c;服务城市、产业、生活中…

在ArcGISPro中创作精美地图

建议从数据下载到最后的出图都跟着走一下&#xff0c;提供了一个完整且全面的教程&#xff0c;建议从数据下载开始&#xff0c;这样可以对ArcGISPro制图流程有一个全面的感触和认知。 1. 绘制北极海冰地图 20 世纪&#xff0c;气候变化导致极地海冰迅速减少。 自 1978 年以来…

鸿蒙实现数据管理

目录&#xff1a; 1、鸿蒙实现数据管理的三种方式2、用户首选项3、键值型数据管理3.1、获取KVManager实例&#xff0c;用于管理数据库对象3.2、创建并获取键值数据库3.3、调用put()方法向键值数据库中插入数据3.4、调用get()方法获取指定键的值3.5、调用delete()方法删除指定键…

JAVA面试汇总(三)集合(一)

JAVA多线程七篇终于写完了&#xff0c;今天开始了新的JAVA面试汇总&#xff0c;集合部分&#xff0c;这部分其实比多线程有意思多了&#xff0c;这个计划最多五篇&#xff0c;也许不到五篇&#xff0c;这是第一篇&#xff0c;开卷。 1.Collection和Collections 的区别&#xff…

使用 ASP.NET Core HttpLoggingMiddleware 记录 http 请求/响应

我们发布了一个应用程序&#xff0c;该应用程序运行在一个相当隐蔽的 WAF 后面。他们向我们保证&#xff0c;他们的产品不会以任何方式干扰我们的应用程序。这是错误的。他们删除了我们几乎所有的“自定义”标头。为了“证明”这一点&#xff0c;我构建了一个中间件&#xff0c…

qt 封装 调用 dll

这个目录下 &#xff0c;第一个收藏的这个 &#xff0c;可以用&#xff0c; 但是有几个地方要注意 第一.需要将dll的头文件添加到qt的文件夹里面 第二&#xff0c;需要在pro文件里面添加动态库路径 第三&#xff0c;如果调用dll失败&#xff0c;那么大概需要将dll文件放在e…

基于自注意力网络的SASRec

运用了自注意力网络&#xff08;self-attention network&#xff0c;SAN&#xff09;的序列推荐算法&#xff08;SASRec&#xff09;能以并行化的方式捕捉同一序列上不同时间步间的转移关系&#xff0c;最后通过加权求和的方式得出每个时间步的序列特征。 算法原理&#xff1a;…

从一个Bug谈前端响应拦截器的应用

一、问题场景 今天在开发商品管理系统时&#xff0c;遇到了一个有趣的问题&#xff1a;当添加重复的商品编号时&#xff0c;页面同时弹出了两条 "商品编号已存在" 错误提示&#xff1a; 这个问题暴露了前端错误处理机制的混乱&#xff0c;让我们从这个问题出发&…

【机器学习chp9】集成学习

一、集成学习的概念 1. 什么是集成学习 定义&#xff1a;集成学习是一种通过组合多个模型&#xff08;称为基学习器&#xff09;来提升整体系统性能的方法。优点&#xff1a; 单个模型性能可能已经优化到极限&#xff0c;难以进一步提高&#xff0c;集成学习通过少量额外工作…