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

[H贪心] lc100376. 新增道路查询后的最短距离 II(贪心+读题+代码实现+周赛409_3)

文章目录

    • 1. 题目来源
    • 2. 题目解析

1. 题目来源

链接:100376. 新增道路查询后的最短距离 II

2. 题目解析

被题目所蒙蔽了…

以为是最短路算法,或者是堆优化 dij 又有什么神奇的性质被我遗忘了?或者是最短路树?…

结果没读好题目,题目说明 query 的所有查询是不会有 相交但不包含 的关系的。也就是说,所有的查询,要么不想交,要么将包含一些小区间在里面。

那么思路就比较明确了,当遇见一个大的 query 区间,只需要将这个大 query 区间中的所有小区间全部弹出即可,因为步长是 1,所以有效的区间个数即为最短路长度。


  • 时间复杂度 O ( ( n + q ) l o g n ) O((n+q)logn) O((n+q)logn)
  • 空间复杂度 O ( n ) O(n) O(n)

class Solution {
public:vector<int> shortestDistanceAfterQueries(int n, vector<vector<int>>& queries) {set<pair<int, int>> S;for (int i = 1; i < n; i ++ ) S.insert({i - 1, i});vector<int> res;for (auto q : queries) {int l = q[0], r = q[1];auto it = S.lower_bound({l, -1});   // 直接找到 小于 [l, ] 左端点的区间// 如果找到了,且找到区间和查询区间同起点,且包含里面的小区间时// it->first == l 这个条件是一个优化条件,如果同起点的话,可能该区间还没被删除过// 但是不同起点的话,且还在我右边界内的点,肯定是被删除了的,就不用再进去判断了// 但是不能将 it->second < r 这个条件删除。不然就会进入 if 判断,S 将 insert 一个区间包含 的 子区间,答案增多一个if (it != S.end() && it->first == l && it->second < r) {// 将这些小区间全部剔除while (it != S.end() && it->first < r) it = S.erase(it);// 将查询区间插入S.insert({l, r});}res.push_back(S.size());}return res;}
};
class Solution {
public:vector<int> shortestDistanceAfterQueries(int n, vector<vector<int>>& queries) {vector<int> d(n), ans(queries.size());iota(d.begin(), d.end(), 0);for (int i = 0; i < queries.size(); i++) {auto l = upper_bound(d.begin(), d.end(), queries[i][0]);auto r = lower_bound(d.begin(), d.end(), queries[i][1]);if (l <= r) d.erase(l, r);ans[i] = d.size() - 1;}return ans;}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • web3 solana
  • 机器学习练手(六):机器学习算法实践实战
  • 【深度学习】【框架】【基本结构】transformer
  • Python如何将Category类的数组categoryList,导出成JSON格式
  • Action部署在线上写文章
  • C#根据反射操作对象
  • 操作系统篇--八股文学习第十二天| 什么是死锁,如何避免死锁?,介绍一下几种典型的锁,讲一讲你理解的虚拟内存
  • Typescript配置文件(tsconfig.json)详解系列五:allowArbitraryExtensions
  • PointNet点云语义分割
  • 使用Apache http client发送json数据(demo)
  • 02:【stm32】工程模板的创建
  • 考研英语二--小作文如何写
  • 苹果iPhone 16 Pro系列有望支持Wi-Fi 7,再也不说苹果信号不好了
  • Python | Leetcode Python题解之第315题计算右侧小于当前元素的个数
  • 08.02_111期_Linux_NAT技术
  • Google 是如何开发 Web 框架的
  • 2017届校招提前批面试回顾
  • CSS实用技巧
  • exif信息对照
  • HomeBrew常规使用教程
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Linux Process Manage
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • PHP那些事儿
  • Python实现BT种子转化为磁力链接【实战】
  • 阿里云购买磁盘后挂载
  • 百度小程序遇到的问题
  • 二维平面内的碰撞检测【一】
  • 官方解决所有 npm 全局安装权限问题
  • 经典排序算法及其 Java 实现
  • 目录与文件属性:编写ls
  • AI算硅基生命吗,为什么?
  • 阿里云移动端播放器高级功能介绍
  • ​【已解决】npm install​卡主不动的情况
  • #LLM入门|Prompt#3.3_存储_Memory
  • #vue3 实现前端下载excel文件模板功能
  • (zt)最盛行的警世狂言(爆笑)
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (转)setTimeout 和 setInterval 的区别
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (自用)网络编程
  • ***通过什么方式***网吧
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net 4.0发布后不能正常显示图片问题
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .Net Core中Quartz的使用方法
  • .NET Project Open Day(2011.11.13)
  • .net 微服务 服务保护 自动重试 Polly
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .net8.0与halcon编程环境构建
  • .net对接阿里云CSB服务