最大重叠区间数量

给你一个区间的数组 arr[N][2],每个区间用 [start, end) 表示(包含端点)。请返回在数轴上任意一点,同时重叠的最大区间数量。

  • 输入: arr = [[1, 2], [2, 4], [3, 6]]

  • 输出: 2

  • 解释: 在 3 ,[2,4] 和 [3,6] 重叠(共 2 个)。

每个区间 [start, end) 拆成两个事件:

  • (start, +1):进入这个区间,覆盖数 +1

  • (end, -1):离开这个区间,覆盖数 -1

把所有事件按坐标排序,然后从左到右扫描,用一个变量 cnt 维护当前覆盖数,过程中记录最大值。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

using pii = pair<int,int>;

int maxOverlap(vector<vector<int>>& nums){
	vector<pii> events;
	for(int i=0;i<nums.size();i++){
		events.emplace_back(nums[i][0],1);
		events.emplace_back(nums[i][1],-1); 
	}
	sort(events.begin(),events.end(),[](const pii& a, const pii& b){
		if(a.first != b.first){
			return a.first<b.first;
		}	
		return a.second<b.second;
	});
	int cnt=0;
	int ans=0;
	for(auto p:events){
		cnt+=p.second;
		ans=max(ans,cnt);
	}
	return ans;
}

int main(){
	int n;
	cin>>n;
	vector<vector<int>> nums;
	for(int i=0;i<n;i++){
		int s,e;
		cin>>s>>e;
		nums.push_back({s,e});
	}
	cout<<maxOverlap(nums)<<endl; 
	return 0;
}
相关推荐
H.莓飛14 小时前
【数据结构】链表_OJ题
linux·数据结构·算法·链表
All for pursuit.14 小时前
【回溯-4】46.全排列
数据结构·c++·算法·leetcode
小鱼~~14 小时前
Recall@K、Precision@K、MRR、nDCG@K简介
人工智能·算法·机器学习
在所不辞兄14 小时前
【零基础学智能仿真-38】从规则矩形到带孔薄板:Gmsh 网格与 FEniCSx 联合求解
人工智能·深度学习·算法·机器学习·工程仿真
一木 之林15 小时前
DDPM扩散模型代码实战:前向加噪造数据、U-Net噪声预测与反向生成手写数字
人工智能·算法·计算机视觉
嘎嘎风15 小时前
MiniMind 学习笔记之 02 字是怎么变成数字的?
算法
QAQmmttyyy15 小时前
ChatFly 开发实录 ⑧|一个 VAD 的自我修养
算法
Logic10115 小时前
关于汉诺塔问题的分析
c语言·算法·递归·函数·解题思路·递归函数·汉诺塔问题
维克兜率天15 小时前
【维克】配对交易的季节性:哪些品种适合长拿?
android·开发语言·笔记·python·算法·kotlin·量化
青少儿编程课堂16 小时前
树上启发式合并详解:子树颜色众数统计与复杂度拆解
c++·python·算法·bfs·信息学竞赛