Leetcode3243. 新增道路查询后的最短距离 I

Every day a Leetcode

题目来源:3243. 新增道路查询后的最短距离 I

解法1:广度优先搜索

暴力。

每次加边后重新跑一遍 BFS,求出从 0 到 n−1 的最短路。

代码:

/** @lc app=leetcode.cn id=3243 lang=cpp** [3243] 新增道路查询后的最短距离 I*/// @lc code=start// 广度优先搜索class Solution
{
public:vector<int> shortestDistanceAfterQueries(int n, vector<vector<int>> &queries){vector<int> e[n];// 建图for (int i = 1; i < n; i++)e[i - 1].push_back(i);auto bfs = [&](){int dis[n];memset(dis, -1, sizeof(dis));queue<int> q;q.push(0);dis[0] = 0;while (!q.empty()){int sn = q.front();q.pop();for (int fn : e[sn])if (dis[fn] == -1){q.push(fn);dis[fn] = dis[sn] + 1;}}return dis[n - 1];};vector<int> ans;for (vector<int> &q : queries){e[q[0]].push_back(q[1]);int res = bfs();ans.push_back(res);}return ans;}
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(q(n+q)),其中 q 是数组 queries 的长度。每次 BFS 的时间是 O(n+q)。

空间复杂度:O(n+q),其中 q 是数组 queries 的长度。

解法2:动态规划

定义 dp[i] 为从 0 到 i 的最短路。

用 from[i] 记录额外添加的边的终点是 i,起点列表是 from[i]。

我们可以从 i−1 到 i,也可以从 from[i][j] 到 i,这些位置作为转移来源,用其 dp 值 +1 更新 dp[i] 的最小值。

初始值:dp[i]=i。

答案:dp[n−1]。

注意:设添加的边为 l→r,只有当 dp[l]+1<dp[r] 时才更新 DP。

代码:

/** @lc app=leetcode.cn id=3243 lang=cpp** [3243] 新增道路查询后的最短距离 I*/// @lc code=start// 动态规划class Solution
{
public:vector<int> shortestDistanceAfterQueries(int n, vector<vector<int>> &queries){vector<int> dp(n);vector<vector<int>> from(n);// 初始化:dp[i] = iiota(dp.begin(), dp.end(), 0);vector<int> ans;// 状态转移for (vector<int> &q : queries){int l = q[0], r = q[1];from[r].push_back(l);if (dp[l] + 1 < dp[r]){dp[r] = dp[l] + 1;// 更新后面的最短路for (int i = r + 1; i < n; i++){dp[i] = min(dp[i], dp[i - 1] + 1);for (int j : from[i]){// 存在一条 j->i 的路径dp[i] = min(dp[i], dp[j] + 1);}}}ans.push_back(dp[n-1]);}return ans;}
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(q(n+q)),其中 q 是数组 queries 的长度。

空间复杂度:O(n+q),其中 q 是数组 queries 的长度。

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

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

相关文章

URP custompasscustom render objects

https://dbbh666.blog.csdn.net/article/details/141296728?spm1001.2014.3001.5502 上一次 custom render pass的时候&#xff0c;直接是quad的渲染&#xff0c;如果想把任意对象绘制到FBO怎么写呢 参考这两个高手的文章&#xff0c;总结一下 https://www.bilibili.com/read…

前端速通面经八股系列(一)—— CSS篇

CSS高频面经目录 一、CSS基础1. CSS选择器及其优先级2. CSS中可继承与不可继承属性有哪些3. display的属性值及其作用4. display的block、inline和inline-block的区别5. 隐藏元素的方法有哪些6. link和import的区别7. transition和animation的区别8. display:none与visibility:…

win10环境下gvim离线配置插件的一些补充

0 总述 在上一篇博客&#xff0c;即《Windows系统下使用gvim配置LaTeX快速书写环境》一文中&#xff0c;本小白试图模仿神级人物Gilles Castel&#xff0c;打造vim下的 LaTeX \LaTeX LATE​X书写环境。实话实说&#xff0c;东施效颦了。虽不至于一无所得&#xff0c;但也仅仅算…

穿越Java世界的继承奇旅:从基类到子类的华丽蜕变

1.为什么要继承 2.什么是继承以及继承的方式 3.继承的一些语法 4.父类成员的访问 5.关键字super 6.关键字protected 7.关键字final 8.继承与组合 一&#xff1a;为什么要继承 ①代码重用&#xff1a;继承允许我们重用、扩展或修改父类的属性和方法&#xff0c;而无需重…

未使用CMSIS之前的stm32标准库中SystemHandler的宏定义

背景&#xff1a; 在stm32的标准库还叫STM32F10xxx_FWLib_V2.0.3的那个年代 文件 STM32F10xFWLib_V2.0.3/FWLib/library/inc/stm32f10x_nvic.h 中有对System Handlers的定义。具体内容如下&#xff1a; /* System Handlers -------------------------------------------------…

【Altium Designer程序开发】生成XML多级数据库文件 V2.0

此工具用于生成多级多节点的XML数据库文件&#xff0c;主要功能用于测试XML文件的生成速度的&#xff0c;运行环境在Altium Designer中&#xff0c;可用于Altium Designer全系列的版本中。 程序界面如下图所示&#xff0c;每一级节点表示每个父Node的子Node的数量&#xff0c;节…

Java面试题:equals和==的区别与联系分别是什么?

1. 运算符 是一个运算符&#xff0c;其用于比较两个变量的内存地址是否相等&#xff1b;对于基本数据类型(int、char、Boolean等)&#xff0c;比较的是它们的值&#xff1b;而对于引用数据类型的话(String、Object、ArrayList等)&#xff0c;比较的是引用&#xff0c;也就是对…

【函数模板】函数模板的类型推导

一、类型的自动推导 当函数模板的返回值被指定或与传入的参数的类型一致&#xff0c;那么可以直接调用函数模板&#xff0c;而不需要显式的指定参数。 //函数推导 template<typename T, typename R> T Add(T a, R b) {return a b; }void Test1() {//自动推导int x 1;…

Linux下递归设置目标目录及其子目录和文件的权限

〇、背景 本文旨在简单介绍一个在Linux环境下批量修改目录及其子目录和文件的权限的方法。 一、实现 首先新建一个shell脚本文件&#xff0c;使用指令$ vi chmod.sh&#xff0c;然后在文件中输入下述代码。 #!/bin/bashOFFSET_INDEX" " DIR_MODE755 FILE_MODE664…

笔记整理—内核!启动!—uboot部分(1)

常规启动时&#xff0c;各镜像都在SD卡中的各种分区中&#xff0c;内核放在kernel分区&#xff0c;从SD卡到DDR的连接处&#xff08;内核不需要进行重定位&#xff0c;直接从链接处启动&#xff09;。uboot从sd卡分区读使用movi命令。 使用fastboot指令可以查看分区情况&#x…

Datawhale X 李宏毅苹果书 AI夏令营 Task2打卡

线性模型&#xff08;Linear model&#xff09; 通常模型的修改来自于对问题的理解&#xff0c;即领域知识 基本定义&#xff1a;把输入特征x乘上一个权重&#xff0c;再加上一个偏置就可以得到预测的结果。 优点&#xff1a;简单易理解&#xff0c;可理解性好&#xff08;权重…

C++(Qt)-GIS开发-QGraphicsView显示瓦片地图简单示例2

C(Qt)-GIS开发-QGraphicsView显示瓦片地图简单示例2 文章目录 C(Qt)-GIS开发-QGraphicsView显示瓦片地图简单示例21、概述2、实现效果3、主要代码4、源码地址 更多精彩内容&#x1f449;个人内容分类汇总 &#x1f448;&#x1f449;GIS开发 &#x1f448; 1、概述 支持多线程…

AWS-亚马逊网络服务(基础服务)-AWS 定价计算器-概述与动手部署:

让我们来概述并亲身实践如何使用 AWS 定价计算器来计算 概述&#xff1a; AWS 定价计算器是 Amazon Web Services (AWS) 提供的基于 Web 的工具&#xff0c;可帮助用户估算其特定用例的 AWS 服务成本。欢迎来到雲闪世界。 它允许客户建模他们的基础设施并根据他们打算使用的…

大数据智能风控核心:模型

概述 模型 线性判别分析方法&#xff0c;Sir Ronald Fisher最早提出模型评分的概念。 个人FICO模型信用分。 巴塞尔委员会发布巴塞尔Ⅱ协议&#xff0c;推出内部评级法&#xff08;Internal Rating Based Approach&#xff0c;IRB&#xff09;​。IRB综合考虑客户评级和债项…

【STM32】BKP备份寄存器与RTC实时时钟

本篇博客重点在于标准库函数的理解与使用&#xff0c;搭建一个框架便于快速开发 目录 BKP简介 BKP代码注解 读写备份寄存器 复位备份寄存器 BKP代码 RTC简介 RTC代码注解 RTCCLK时钟源选择 分频器配置 时钟同步 RTC代码 MyRTC.h MyRTC.c main.c BKP简介 BKP&…

手把手教你从开发进度划分测试

一.单元测试&#xff08;Unit Testing&#xff09; 单元测试&#xff1a;软件单元测试的对象是可独立编译或汇编的程序模块。测试的对象是软件测试中的最小单位&#xff1a;模块。 测试阶段&#xff1a;编码后或者编码前&#xff08;TDD&#xff1a;测试驱动开发&#xff09;…

【网络基础】探索 NAT 技术:IP 转换、NAPT、NAT穿越及代理服务器

文章目录 1. 前言2. IP 转换过程3. NAPT① 基本概念② 工作原理③ 优缺点④ 实际应用 4. 缺陷5. NAT 穿越① 概述② 示例 6. NAT 与 代理服务器① 代理服务器与NAT的区别&#xff1a;② 正向代理 / 反向代理 服务器 1. 前言 NAT&#xff08;网络地址转换&#xff09;是一种常见…

Python数据清洗基础

在Python中进行数据清洗和可视化是一个多步骤的过程&#xff0c;涉及到数据的读取、预处理、分析和图形表示。以下是一些关键步骤和代码示例&#xff0c;这些步骤可以帮助你从原始数据中提取有价值的信息&#xff0c;并以直观的方式展示。 数据清洗 读取数据&#xff1a; im…

【Python 千题 —— 基础篇】评论倾向分析

Python 千题持续更新中 …… 脑图地址 👉:⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目描述 在某个电商平台的评论系统中,用户可以提交商品评论。为了分析评论的情感倾向,我们需要编写一个程序来处理用户评论,并对评论内容进行简单的分析和处理。…

Mac/Linux系统matplotlib中文支持问题

背景 matplotlib是python中最常用的数据可视化分析工具&#xff0c;Mac和Linux系统无中文字体&#xff0c;不支持中文显示&#xff08;希望后续可以改进&#xff09;&#xff0c;需要进行字体的下载和设置才能解决。笔者经过实践&#xff0c;发现Mac系统和Linux系统解决方案略…