【每日一题】统计区间中的整数数目

文章目录

  • Tag
  • 题目来源
  • 解题思路
    • 方法一:平衡二叉搜索树
  • 写在最后

Tag

【平衡二叉搜索树】【设计类】【2023-12-16】


题目来源

2276. 统计区间中的整数数目


解题思路

方法一:平衡二叉搜索树

思路

用一棵平衡二叉搜索树维护插入的区间,树中的区间两两不想交。

当插入一个新区间时,需要找到所有与该区间有重合整数的区间,将这些区间合并后并将合并后的区间插入到平衡树中。

区间包含左端点 l 和右端点 r 两个属性,在树中参与排序的是左端点。提前说明一下,后文提到的大区间指的是左端点大。

当插入一个新的区间 [left, right],需要先找到树中和该区间可能有重复整数的最大区间 interval,即树中满足 interval.l <= right 的区间,如果区间 [left, right] 和区间 interval 相交,则将它们合并。然后,继续寻找这样的区间,直到不存咋这样的区间或者找到的区间和待插入的区间不想交。同时用一个整数 cnt 维护树中区间覆盖的整数个数,当调用 count 时,直接返回 cnt

算法

class CountIntervals {
private:map<int, int> mp;int cnt = 0;
public:CountIntervals() {}void add(int left, int right) {auto interval = mp.upper_bound(right); // 找出 mp 中 > right 的第一个 leftif (interval != mp.begin()) {interval --;}while (interval != mp.end() && interval->first <= right && interval->second >= left) {int l = interval->first, r = interval->second;left = min(left, l);right = max(right, r);cnt -= r - l + 1;mp.erase(interval);interval = mp.upper_bound(right);if (interval != mp.begin()) {interval --;}}cnt += right - left + 1;mp[left] = right;}int count() {return cnt;}
};/*** Your CountIntervals object will be instantiated and called as such:* CountIntervals* obj = new CountIntervals();* obj->add(left,right);* int param_2 = obj->count();*/

复杂度分析

时间复杂度:add 操作的均摊时间复杂度为 O ( l o g n ) O(logn) O(logn),其中 n n n 是调用 add 的次数,因为每个区间最多只会被加入和删除一次,单词加入和删除的时间复杂度为 O ( l o g n ) O(logn) O(logn)。单次 add 的复杂度最差为 O ( n × l o g n ) O(n \times logn) O(n×logn)

空间复杂度: O ( n ) O(n) O(n)


写在最后

如果您发现文章有任何错误或者对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度的方法,欢迎评论区交流。

最后,感谢您的阅读,如果有所收获的话可以给我点一个 👍 哦。

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

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

相关文章

Redis常用内存淘汰策略?

从淘汰范围来说可以分为不淘汰任何数据、只从设置了到期时间的键中淘汰和从所有键中淘汰三类。而从淘汰算法来分&#xff0c;又主要分为 random&#xff08;随机&#xff09;&#xff0c;LRU&#xff08;最近最少使用&#xff09;&#xff0c;以及 LFU&#xff08;最近最不常使…

Linux--LAMP 平台部署及应用

5.1 LAMP平台概述 LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整套系统和相关软件&#xff0c;能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词&#xff0c;具体包括Linux操作系统&#xff0c;Apache 网站服务器、MySQL数据库服务器&…

【人工智能 | 知识表示】问题规约法 谓词/符号逻辑,良好的知识表示是解题的关键!(笔记总结系列)

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

c#可变参数(params)关键字

通过使用 params 关键字&#xff0c;可以指定采用可变数量参数的方法参数。 可以发送参数声明中指定类型的参数的逗号分隔列表&#xff0c;也可以发送指定类型的参数数组。您也可以不发送任何参数。如果未发送任何参数&#xff0c;则参数列表的长度为零。 方法声明中的 param…

早上好,我的leetcode(第一期)

写在前面&#xff1a;每天早上到实验室早上昏昏欲睡&#xff0c;那不如写一题吧~ 文章目录 371. 两整数之和面试题08.05.递归乘法29.两数相除50.Pow(x,n)面试题 16.07. 最大数值2119. 反转两次的数字69. x 的平方根70.爬楼梯1631.最小体力消耗路径 371. 两整数之和 两整数之和…

基于ssm轻型卡车零部件销售平台源码和论文

随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;轻型卡车零部件销售平台也不例外&#xff0c;但目前国内的市场仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化&a…

Caused by: java.net.ConnectException: 拒绝连接: hadoop104/192.168.124.130:4142

项目场景&#xff1a;hadoop102接收消息&#xff0c;自定义拦截器&#xff0c;包含hello的发往hadoop103,不包含的发往hadoop104 报错原因&#xff1a; 原因1&#xff1a; 应该先开启接收方&#xff08;服务端&#xff09;&#xff0c;hadoop103,hadoop104,最后开启hadoop10…

QDialog子类的使用

背景&#xff1a; 我用Qt designer实现了如下效果&#xff1a; 但在实际使用的时候&#xff0c;发现OK和Cancel按钮点是点不动的。 解决方法&#xff1a; 需要手动添加相关信号槽函数&#xff1a; connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(accept()));connect…

yarn或者pnpm第一次执行的时候遇到报错yarn : 无法加载文件......因为在此系统上禁止运行脚本

报错&#xff1a; yarn : 无法加载文件 C:\Users\rina2\AppData\Roaming\npm\yarn.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/http://go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 解决方案&#xff1a…

AWS-CDN只能备用域名访问-使用Lambda@Edge(禁止分配的域名访问)

场景&#xff1a;cdn使用备用域名后&#xff0c;希望用户只能从备用域名访问&#xff0c;而不是自动分配的cdn域名&#xff0c;这也将是一个安全漏洞&#xff0c;被扫描到cdn域名访问刷流量等&#xff01; 【建议部署前查看】参考链接&#xff1a; 1.官方cdn返回示例 2.lambdae…

算法训练第三十九天|62. 不同路径、63. 不同路径 II

62. 不同路径&#xff1a; 题目链接 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有…

云服务配置docker镜像容器以及常用操作命令

首先通过ssh进入云服务器。如何ssh进入云服务器。 简单讲解一下docker中镜像和容器&#xff0c;打个比方&#xff0c;镜像相当于印钱的那个模板&#xff0c;容器相当于从模板上拓下来的钱&#xff0c;不同的模板可以印出不同的钱。但容器被修改后也可以变成新的镜像&#xff0…

Postman中参数填写方式

Postman中参数填写和请求方法有关&#xff0c;一般接口用例请求方法GET与POST常用&#xff0c;所以主要是这两种请求方法请求参数填写 一、GET请求方法参数填写 1、直接在URL中填写请求参数,如直接在URL中填写&#xff1a; http://www.example.com:8089/userapi?unamelisi&…

c++_01_名字空间_复合类型_缺省参数_哑元函数

0 前言 C和C一样&#xff0c;都属于编译型语言 C和C一样&#xff0c;都属于强类型语言 C对C完全兼容&#xff0c;并提供更多面向对象的特性&#xff1a;语言风格更加简洁&#xff0c;类型检查更加严格 1 名字空间 namespace WHY&#xff1f;划分更精细的逻辑单元(逻辑空间)&…

Faulhaber 2.5代运动控制系统 25mNm/13W

2.5代控制系统&#xff1b; PWM输出&#xff1b; 四象限控制带&#xff1b; RS232或CANopen通信接口&#xff1b; 2250_BX4_CxD 选件&#xff0c;电缆和连接信息&#xff1a; 适配部件&#xff1a;

谷歌的开源供应链安全

本内容是对Go项目负责人Russ Cox 在 ACM SCORED 活动上演讲内容[1]的摘录与整理。 SCORED 是Software Supply Chain Offensive Research and Ecosystem Defenses的简称, SCORED 23[2]于2023年11月30日在丹麦哥本哈根及远程参会形式举行。 摘要 &#x1f4a1; 谷歌在开源软件供应…

【面经】2024年软件测试面试题大全(持续更新)附答案

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

YOLOv8使用自定义改进后的模型同时《加载官方预训练权重》教程,附代码

YOLOv8自定义改进后的模型同时《加载官方预训练权重》教程,附代码 💡该教程为改进YOLOv8指南,属于《芒果书》📚系列,包含大量的原创改进方式🚀 💡🚀🚀🚀内含改进源代码 按步骤操作运行改进后的代码即可💡更方便的统计更多实验数据,方便写作 YOLOv8自定义…

Spring boot basePackages 通配符* 找不到Bean

Spring boot basePackages 通配符* 找不到Bean 今天遇到了一个关于spring boot 组件ComponentScan 中basePackages 使用通配符* 找不到Bean的问题 目录结构中BussinessPerson与Dog类中都有标注有Component注解&#xff0c;结果扫描不到。 然后删除通配符&#xff0c;结果运行成…

C++相关闲碎记录(15)

1、string字符串 #include <iostream> #include <string> using namespace std;int main (int argc, char** argv) {const string delims(" \t,.;");string line;// for every line read successfullywhile (getline(cin,line)) {string::size_type beg…