当前位置: 首页 > news >正文

力扣:100379. 新增道路查询后的最短距离 I(Java,BFS)

目录

  • 题目描述:
  • 示例 :
  • 代码实现:

题目描述:

给你一个整数 n 和一个二维整数数组 queries。
有 n 个城市,编号从 0 到 n - 1。初始时,每个城市 i 都有一条单向道路通往城市 i + 1( 0 <= i < n - 1)。
queries[i] = [ui, vi] 表示新建一条从城市 ui 到城市 vi 的单向道路。每次查询后,你需要找到从城市 0 到城市 n - 1 的最短路径的长度。
返回一个数组 answer,对于范围 [0, queries.length - 1] 中的每个 i,answer[i] 是处理完前 i + 1 个查询后,从城市 0 到城市 n - 1 的最短路径的长度。

示例 :

输入: n = 5, queries = [[2, 4], [0, 2], [0, 4]]
输出: [3, 2, 1]
解释:
在这里插入图片描述
新增一条从 2 到 4 的道路后,从 0 到 4 的最短路径长度为 3。
在这里插入图片描述
新增一条从 0 到 2 的道路后,从 0 到 4 的最短路径长度为 2。
在这里插入图片描述
新增一条从 0 到 4 的道路后,从 0 到 4 的最短路径长度为 1。

代码实现:

class Solution {public int[] shortestDistanceAfterQueries(int n, int[][] queries) {// 初始化答案列表List<Integer> answer = new ArrayList<>();// 初始化图:表示当前点能到达其他位置的集合List<List<Integer>> graph = new ArrayList<>();for (int i = 0; i < n; i++) {graph.add(new ArrayList<>());// 添加0到n-1个城市}// 添加初始的单向边for (int i = 0; i < n - 1; i++) {graph.get(i).add(i + 1);// 表示第i个城市可以到达第i+1个城市}// 处理每一个查询for (int[] query : queries) {int u = query[0];// 起点int v = query[1];// 终点// 添加新建的单向边graph.get(u).add(v);// 使用BFS计算从城市0到城市n-1的最短路径长度answer.add(bfsShortestPath(graph, n));}// 将列表转换为数组int[] res = new int[answer.size()];for (int i = 0; i < answer.size(); i++) {res[i] = answer.get(i);}return res;}int bfsShortestPath(List<List<Integer>> graph, int n) {// 队列用于BFSQueue<Integer> queue = new LinkedList<>();// 距离数组用于记录从0到其他节点的距离int[] dist = new int[n];Arrays.fill(dist, Integer.MAX_VALUE);// 将dist数组所有元素初始化为Integer中的最大值dist[0] = 0;// 初始化0到第0个城市,距离为0queue.offer(0);// 入队// 从0开始广度优先搜索队列内元素while (!queue.isEmpty()) {// 当队列为空时,跳出循环int current = queue.poll();// 出队当前队头元素for (int neighbor : graph.get(current)) {// 遍历当前队头元素在图上可达邻点if (dist[neighbor] == Integer.MAX_VALUE) {// 如果邻点为初始值时dist[neighbor] = dist[current] + 1;// 更新最短距离queue.offer(neighbor);// 并且让邻点入队}}}return dist[n - 1];// 返回dist数组中尾部元素,即当前路径中0到n-1的最短距离}
}

相关文章:

力扣:100379. 新增道路查询后的最短距离 I(Java,BFS)

目录 题目描述&#xff1a;示例 &#xff1a;代码实现&#xff1a; 题目描述&#xff1a; 给你一个整数 n 和一个二维整数数组 queries。 有 n 个城市&#xff0c;编号从 0 到 n - 1。初始时&#xff0c;每个城市 i 都有一条单向道路通往城市 i 1&#xff08; 0 < i < …...

程序开发的常用设计思想

程序开发的设计思想多种多样&#xff0c;每种思想都旨在提高软件的可读性、可维护性、可扩展性和性能。以下是一些常见的程序开发设计思想&#xff1a; 1. 面向对象编程&#xff08;Object-Oriented Programming, OOP&#xff09; 核心思想&#xff1a; 将程序视为对象的集合…...

Qt之Gui

组件依赖关系 应用 #mermaid-svg-GADicZtZJRVVUeiF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GADicZtZJRVVUeiF .error-icon{fill:#552222;}#mermaid-svg-GADicZtZJRVVUeiF .error-text{fill:#552222;stroke:#…...

Linux操作系统之进程信号

进程信号 一、信号1、概念2、系统定义的信号列表3、常见的信号处理方式 二、产生信号的方式1、终端按键&#xff08;1&#xff09;组合键&#xff08;2&#xff09;示例代码&#xff08;3&#xff09;运行结果 2、调用系统函数&#xff08;1&#xff09;kill命令&#xff08;2&…...

科普文:微服务之Spring Cloud Alibaba消息队列组件RocketMQ工作原理

概叙 本文探讨 RocketMQ 的事务消息原理&#xff0c;并从源码角度进行分析&#xff0c;以及事务消息适合什么场景&#xff0c;使用事务消息需要注意哪些事项。 同时详细介绍RocketMQ 事务消息的基本流程&#xff0c;并通过源码分析揭示了其内部实现原理&#xff0c;尽管事务消…...

黑马头条vue2.0项目实战(五)——首页—频道编辑

目录 1. 使用页面弹出层 1.1 页面弹出层简单使用 1.2 创建频道编辑组件 1.3 页面布局 2. 展示我的频道 3. 展示推荐频道列表 3.1 获取所有频道 3.2 处理展示推荐频道 4. 添加频道 5. 编辑频道 5.1 处理编辑状态 5.2 切换频道 5.3 让激活频道高亮 5.4 删除频道 6.…...

Java:基础语法

基础语法 1. 基本结构类和方法 2. 变量和数据类型基本数据类型引用数据类型 3. 操作符算术操作符比较操作符逻辑操作符 4. 控制结构条件语句循环语句 5. 数组6. 方法7. 面向对象编程类和对象继承多态 8. 异常处理9. 常用类库 1. 基本结构 类和方法 Java程序的基本单位是类&am…...

安装bedtools详细步骤和详细介绍bedtools用法

安装bedtools详细步骤和详细介绍bedtools用法 一、安装bedtools详细步骤下载解压安装编译依赖编译设置环境变量激活环境变量执行命令查看版本二、详细介绍bedtools用法使用bedtools示例用法bedtools intersectbedtools bamtobedbedtools window一、安装bedtools详细步骤 下载 …...

21 - grace数据处理 - 补充 - 泄露误差改正 - Slepian局部谱分析法(一) - slepian分析法理论理解

21 - grace数据处理 - 泄露误差改正 - Slepian局部谱分析法 - slepian分析法理论理解 0 引言1 slepian谱分析法1.1 slepian谱分析法AI解释1.2 基于slepian谱分析法的GRACE数据处理应用2 slepian谱分析法关键过程实现2.1 求解正定特征方程2.2 计算slepian基函数2.3 计算Shannon数…...

WLAN国家码与信道顺从表

国家码和信道顺从表及信道功率限制 不同的国家和地区规定了在本国或本地区可以使用的信道、射频信号在信道中的最大发射功率。工作在不同信道的射频信号&#xff0c;信号强度可能会有差别。国家码和信道顺从表、各信道的功率限制值、信道编号和频率对照关系请参见国家码和信道…...

行为型设计模式1:状态/策略/命令

行为型设计模式&#xff1a;状态/策略/命令 (qq.com)...

【知识专栏丨python数分实战】天猫订单数据分析及可视化|taobao天猫订单接口

今天这篇文章将给大家介绍天猫订单数据分析及可视化案例。 import pandas as pdimport numpy as npfrom pyecharts.charts import Pie,Bar,Line,Map,Map3D,Funnelfrom pyecharts import options as optsimport matplotlib.pyplot as pltimport warningsimport seaborn as snsfr…...

[kimi笔记]为什么csc.exe不可以双击运行

csc.exe 是 C# 编译器的可执行文件&#xff0c;它是 .NET Framework 的一部分&#xff0c;用于编译 C# 源代码文件&#xff08; .cs 文件&#xff09;生成可执行文件&#xff08; .exe 文件&#xff09;或其他类型的程序集。 csc.exe 不能通过双击运行的原因有以下几点&…...

护眼大路灯哪个牌子好?2024学生护眼大路灯推荐

护眼大路灯哪个牌子好&#xff1f;护眼大路灯不仅能够提供日常的光线照明&#xff0c;还模拟了太阳光光线&#xff0c;使在室内用眼学习也能够有着自然光般的舒适感&#xff0c;但现在市场上有许多对产品质量把控不过关、光线效果欠佳、存有安全隐患的劣质护眼大路灯产品&#…...

Vue项目中手搓滑动校验模块-demo

实现代码 SliderCheck.vue <template><div class"drag" ref"dragDiv"><div class"drag_bg" ref"dragBg"></div><div class"drag_text" ref"dragText">{{ confirmWords }}</di…...

Socket如何实现客户端和服务器间的通信

Socket 是实现网络通信的一种机制&#xff0c;它允许在不同主机之间的进程通过网络进行数据交换。下面我将简要介绍如何使用 Socket 实现客户端和服务器间的通信。 客户端-服务器通信步骤&#xff1a; 服务器端&#xff1a; 创建服务器端 Socket&#xff1a; 服务器端通过创…...

基于Spring boot + Vue的校园论坛

作者的B站地址&#xff1a;程序员云翼的个人空间-程序员云翼个人主页-哔哩哔哩视频 csdn地址&#xff1a;程序员云翼-CSDN博客 1.项目技术栈&#xff1a; 前后端分离的项目 后端&#xff1a;Springboot MybatisPlus 前端&#xff1a;Vue ElementUI 数据库&#xff1a; …...

RabbitMQ高级特性 - 生产者消息确认机制

文章目录 生产者消息确认机制概述confirm 代码实现return 代码实现 生产者消息确认机制 概述 为了保证信息 从生产者 发送到 队列&#xff0c;因此引入了生产者的消息确认机制. RabbitMQ 提供了两种解决方案&#xff1a; 通过事务机制实现.通过发送确认机制&#xff08;confi…...

webpack的loader机制

webpack的loader机制 loader本质上就是导出函数的JavaScript模块。导出的函数&#xff0c;可以用来实现内容的转换。 /* * param{string|Buffer} content 源文件的内容 * param{object} [map] SourceMap数据 * param{any} [meta] meta数据&#xff0c;可以是任何数据 * */ fu…...

(STM32笔记)十一、通过EXTI外部中断实现 按键控制LED

我用的是正点的STM32F103来进行学习&#xff0c;板子和教程是野火的指南者。 之后的这个系列笔记开头未标明的话&#xff0c;用的也是这个板子和教程。 十一、通过EXTI外部中断实现 按键控制LED 十一、通过EXTI外部中断实现 按键控制LED1、按键模块按键原理图按键程序思路 2、中…...

Loop:5分钟打造优雅Mac窗口管理,告别鼠标拖拽的烦恼

Loop&#xff1a;5分钟打造优雅Mac窗口管理&#xff0c;告别鼠标拖拽的烦恼 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 你是否也经历过这样的场景&#xff1a;正在专注写代码&#xff0c;却要频繁拖…...

GLM-4.1V-9B-Base效果展示:书法作品字体+内容+文化内涵中文解析

GLM-4.1V-9B-Base效果展示&#xff1a;书法作品字体内容文化内涵中文解析 1. 模型能力概览 GLM-4.1V-9B-Base是智谱开源的视觉多模态理解模型&#xff0c;在中文视觉理解任务上表现出色。不同于常规的图片识别工具&#xff0c;这款模型能够深入理解图像中的文化元素&#xff…...

ai辅助开发:借助快马平台智能生成与交互式解析yolov8网络架构图

最近在做一个计算机视觉相关的项目&#xff0c;需要用到YOLOv8模型。作为一个视觉模型小白&#xff0c;最头疼的就是理解这个复杂的网络结构。好在发现了InsCode(快马)平台&#xff0c;它提供的AI辅助开发功能简直是我的救星。 自然语言输入 以前画网络结构图&#xff0c;要么自…...

AMD Ryzen系统调试利器:SMUDebugTool全方位应用指南

AMD Ryzen系统调试利器&#xff1a;SMUDebugTool全方位应用指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitc…...

Windows驱动存储深度管理:DriverStore Explorer全方位解决方案

Windows驱动存储深度管理&#xff1a;DriverStore Explorer全方位解决方案 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 一、驱动管理困境与突破路径 1.1 系统驱动管理的核心挑战 W…...

自动控制原理实验四:基于MATLAB/Simulink的系统频率特性分析与可视化

1. 实验背景与核心概念 频率特性分析是自动控制领域最实用的工具之一&#xff0c;它就像给系统做"心电图"——通过不同频率的输入信号&#xff0c;观察系统的"心跳反应"。我在工业现场调试时&#xff0c;经常用这种方法快速判断系统稳定性。这次我们要用M…...

小红书数据采集实战指南:3种高效方法解决内容分析难题

小红书数据采集实战指南&#xff1a;3种高效方法解决内容分析难题 【免费下载链接】xhs 基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/ 项目地址: https://gitcode.com/gh_mirrors/xh/xhs 小红书作为中国最大的生活方式分享平台&#xff0c;每天产…...

Ostrakon-VL像素终端实战:用实时摄像头完成便利店突击巡检

Ostrakon-VL像素终端实战&#xff1a;用实时摄像头完成便利店突击巡检 1. 像素特工终端介绍 想象一下&#xff0c;你是一名便利店巡检员&#xff0c;每天需要检查几十家门店的商品陈列、价签准确性和店面整洁度。传统方法需要手动拍照记录、填写表格&#xff0c;既耗时又容易…...

Janus-Pro-7B在CNN图像识别中的增强应用

Janus-Pro-7B在CNN图像识别中的增强应用 1. 引言 图像识别技术正在经历一场革命性的变革。传统的CNN模型虽然在图像分类任务上表现出色&#xff0c;但在复杂场景和多模态理解方面仍存在局限。今天我们要介绍的Janus-Pro-7B&#xff0c;作为一个统一的多模态理解和生成框架&am…...

国内顶级的SEO技术网站有哪些

国内顶级的SEO技术网站有哪些&#xff1f; 在当今互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为每个网站营销者不可忽视的重要环节。国内顶级的SEO技术网站不仅为业内人士提供了宝贵的技术分享和实践经验&#xff0c;还为企业的网站流量优化提供了有…...