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

news2024/9/30 4:56:42

目录

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

题目描述:

给你一个整数 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) {
        // 队列用于BFS
        Queue<Integer> queue = new LinkedList<>();
        // 距离数组用于记录从0到其他节点的距离
        int[] dist = new int[n];
        Arrays.fill(dist, Integer.MAX_VALUE);// 将dist数组所有元素初始化为Integer中的最大值
        dist[0] = 0;// 初始化0到第0个城市,距离为0
        queue.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的最短距离
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web高可用群集架构部署----超详细

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

【笔记1-6】Qt bug记录:Qt6 无法使用qsort函数排序

在进行Qt5向Qt6升级的过程中&#xff0c;发现Qt6会编译时会出现以下错误&#xff0c;找不到qsort的定义 一开始以为应该是需要头文件或者.pro文件追加一些配置的问题&#xff0c;但是按照下面的提示追加了两个头文件后也没有效果 再进一步调查&#xff0c;找到了下面的文章&a…

python3 pyside6图形库学习笔记及实践(三)

目录 前言菜单栏相关控件使用QtDesigner快速构建菜单栏结构语法 上下文菜单概念为窗体添加上下文菜单为控件添加上下文菜单 折叠菜单资源的加载内置图标Rcc的使用创建资源文件加载资源文件 前言 本系列文章为b站PySide6教程以及官方文档的学习笔记 原视频传送门&#xff1a;【…

【Linux 17】进程信号

文章目录 &#x1f308; 一、信号的概念⭐ 1. 什么是信号⭐ 2. 常见的信号⭐ 3. 信号的管理 &#x1f308; 二、进程的运行⭐ 1. 进程运行模式⭐ 2. 查看后台进程⭐ 3. 运行后台进程⭐ 4. 终止后台进程 &#x1f308; 三、信号的产生⭐ 1. 通过键盘产生信号⭐ 2. 调用系统函数向…

YiYi-Web项目技术栈介绍

项目地址&#xff1a;https://gitee.com/jack0240/yiyi-web YiYi后台管理系统&#xff08;不分离版&#xff09;&#xff0c;SpringBoot Thymeleaf Layui 后台管理系统框架。 前端技术栈 HTML JavaScript JQuery Layui、Bootstrap Echarts图表、大屏展示、富文本 进阶&#…

书生大模型实战营第三期——入门岛

第一关&#xff1a;Linux基础知识 任务如下&#xff1a; 任务描述闯关任务完成SSH连接与端口映射并运行hello_world.py可选任务 1将Linux基础命令在开发机上完成一遍可选任务 2使用 VSCODE 远程连接开发机并创建一个conda环境可选任务 3创建并运行test.sh文件 1. 使用密码进行…

数据结构——单向链表

目录 前言 一、单向链表 二、单向链表基本操作 1、链表单创建 2.节点插入 &#xff08;1&#xff09;尾部插入 &#xff08;2&#xff09;任意位置插入 3、单向链表节点删除 4、链表打印 5、释放链表 6、链表逆序 ...... 三、链表测试 总结 前言 链表&#xff08;Linked List&a…

单细胞Seurat的umi矩阵-与feature、counts(用于质控)

目录 关于umi矩阵学习 用umi计算feature、counts值 ①meta数据查看 ②Count和Feature计算(生成Seurat时自动计算) 1)提取UMI矩阵 2)计算 其他指标 评估质量指标(重点) 1)UMI计数 2)基因计数 3)UMIs vs. genes detected 4)线粒体计数比率 5)综合过滤 过…

【C语言篇】文件操作(下篇)

文章目录 前言文件的顺序读写fscanf和fprintffread和fwrite 文件的随机读写fseekftellrewind 文件读取结束的判定容易被错误使用的feof 文件缓冲区 前言 本篇接上一篇文件操作&#xff08;上篇&#xff09;的内容 文件的顺序读写 在上一篇已经介绍了前面四个了&#xff0c;接…

【人工智能基础四】循环神经网络(RNN)与长短时记忆网络(LSTM)

文章目录 一. RNN1. 循环神经网络结构2. 循环神经网络计算2.1. 机器翻译2.2. 循环体 二. 长短时记忆网路&#xff08;LSTM&#xff09;1. 产生背景2. LSTM的设计思想与LSTM的链式结构2.1. LSTM的设计思想2.2. LSTM链式结构图与遗忘门 3. 长短时记忆网络结构 一. RNN RNN出现的…

五种多目标算法(MOGOA、MOMA、MODA、MOPSO、NSGA2)性能对比(MATLAB代码)

一、算法介绍 MOGOA&#xff1a;多目标蝗虫优化算法 MOMA&#xff1a;多目标蜉蝣算法 MODA&#xff1a;多目标蜻蜓算法 MOPSO&#xff1a;多目标粒子群优化算法 NSGA2&#xff1a;非支配排序遗传算法II 这些算法都是针对多目标优化问题设计的元启发式算法&#xff0c;每种…

Java | Leetcode Java题解之第321题拼接最大数

题目&#xff1a; 题解&#xff1a; class Solution {public int[] maxNumber(int[] nums1, int[] nums2, int k) {int m nums1.length, n nums2.length;int[] maxSubsequence new int[k];int start Math.max(0, k - n), end Math.min(k, m);for (int i start; i < e…

C语言 | Leetcode C语言题解之第321题拼接最大数

题目&#xff1a; 题解&#xff1a; int compare(int* subseq1, int subseq1Size, int index1, int* subseq2, int subseq2Size, int index2) {while (index1 < subseq1Size && index2 < subseq2Size) {int difference subseq1[index1] - subseq2[index2];if (…

Codeforces Round 963 (Div. 2) A~C

封面原图 画师やんよ 掉大分的一场 连夜补题 真的不会写啊真的红温了 A - Question Marks 题意 选择题中答案为ABCD的题目各有n道&#xff0c;小明的答案给你&#xff0c;其中&#xff1f;表示这道题空着没写&#xff0c;问他的最高得分 思路 空着的题目肯定没分 超出选项…

【连续数组】python刷题记录

R3-前缀和专题 绝对要用字典记录 ben神&#xff0c;前缀和字典 class Solution:def findMaxLength(self, nums: List[int]) -> int:#前缀和字典,key为差值&#xff0c;value为坐标dict{0:-1}#当前1和0的差值counter0ret0for i,num in enumerate(nums):#多1&#xff0b;1if…

服务器自动部署网络安装环境

实验环境 rhel7&#xff1a;IP地址为172.25.254.200、主机名为node1.rhel7.org 实验配置 一.kickstart自动安装脚本制作 1.安装图形化生成kickstart自动安装脚本的工具 [rootnode1 ~]# yum install system-config-kickstart 2. 启动图形制作工具 [rootnode1 ~]# system-…

[Meachines] [Easy] shocker CGI-BIN Shell Shock + Perl权限提升

信息收集 IP AddressOpening Ports10.10.10.56TCP:80,2222 $ nmap -p- 10.10.10.56 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.18 ((Ubuntu)) |_http-title: Site doesnt have a title (text/html). |_http-server-…

《集成学习实战》:解锁机器学习的智慧合力

《集成学习实战》&#xff1a;解锁机器学习的智慧合力 在机器学习的浩瀚领域中&#xff0c;集成学习以其独特的“集体智慧”理念脱颖而出&#xff0c;成为解决复杂问题、提升模型性能的强大工具。《集成学习实战》一书&#xff0c;正是这样一本引领读者深入探索集成学习奥秘的…

task1打卡:Linux

闯关任务 hello_world 任务1 Linux命令 任务2 conda创建虚拟环境并运行test.py 任务3 test.sh

Spark wordcount实验

Spark WordCount实验一 启动spark 1. 数据准备 创建建数据文件夹 进入data文件夹 创建文本文件 并查看是否创建成功 文件内容 查看文件目录 启动pyspark 3、输入代码 从本地读入文本数据 读入1中创建好的data.txt文本文件。 并计算打印结果 Spark WordCount实验二 切工作目…