当前位置: 首页 > 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的最短距离}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Opencv图像增强技术
  • 力扣765.情侣牵手
  • 美股:Nvidia的新一代AI芯片Blackwell或因设计缺陷推迟上市
  • Spark和Flink的介绍、区别以及各自的应用场景
  • 全球社区的建立:Facebook在跨文化交流中的角色
  • 机器学习笔记 第八章集成学习
  • 揭秘eBay店铺排名提升秘诀:测评自养号的好处
  • 数据库系列: 主流分库分表中间件介绍(图文总结)
  • 【C++】list介绍以及模拟实现(超级详细)
  • 前端性能优化-性能检测指标与工具
  • 【MySQL】慢sql优化全流程解析
  • 飞浆OCR模型训练详细教程
  • 短视频系统设计:支持三千万用户同时在线看视频
  • OD C卷 - 分配土地
  • 在 Django 模板中渲染并行数组
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • redis学习笔记(三):列表、集合、有序集合
  • Shell编程
  • web标准化(下)
  • 编写符合Python风格的对象
  • 当SetTimeout遇到了字符串
  • 聊聊hikari连接池的leakDetectionThreshold
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 使用 QuickBI 搭建酷炫可视化分析
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​Java并发新构件之Exchanger
  • ​Python 3 新特性:类型注解
  • #include<初见C语言之指针(5)>
  • (2)Java 简介
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (二十四)Flask之flask-session组件
  • (三)docker:Dockerfile构建容器运行jar包
  • (四)图像的%2线性拉伸
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)u-boot-nand.bin的下载
  • (转)mysql使用Navicat 导出和导入数据库
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .NET C# 使用GDAL读取FileGDB要素类
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET Standard 的管理策略
  • .net 微服务 服务保护 自动重试 Polly
  • /bin/bash^M: bad interpreter: No such file or directory
  • [012-1].第12节:Mysql的配置文件的使用
  • [20181219]script使用小技巧.txt
  • [2669]2-2 Time类的定义
  • [Android] Android ActivityManager
  • [Android]How to use FFmpeg to decode Android f...
  • [bzoj4240] 有趣的家庭菜园
  • [CF543A]/[CF544C]Writing Code
  • [DNS网络] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案
  • [dts]Device Tree机制
  • [EFI]Acer Aspire A515-54g电脑 Hackintosh 黑苹果efi引导文件