最大重叠区间数量

给你一个区间的数组 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;
}
相关推荐
bksczm6 小时前
Redis数据结构之hash
数据结构·redis·哈希算法·1024程序员节
xiangyun616 小时前
C++ priority_queue 底层:手撕二叉堆与 Top K 问题
c++·算法·面试·stl·1024程序员节
qz_Serene6 小时前
练习算法题:双指针 -cpp
c++·算法·leetcode·1024程序员节
Nuanyt7 小时前
Hot 100 刷题笔记 · 数组与哈希专题(3 题)
java·笔记·算法·leetcode·哈希算法·1024程序员节
碧海银沙音频科技研究院7 小时前
基于炬芯平台ATS308X多模型兼容语音识别算法
人工智能·算法·语音识别
爱读书的小胖8 小时前
LeetCode 274 H 指数 C 语言解题分析
c语言·算法·leetcode·1024程序员节
basketball6168 小时前
动态规划第一章:引论
算法·动态规划·1024程序员节
星夜离尘568 小时前
MATLAB 因果采样保持:用历史匹配和数据年龄防止未来信息泄漏
数据结构·算法·matlab
思麟呀9 小时前
BTree的原理与 C++ 完整实现
c语言·数据结构·c++·算法·1024程序员节
黄俊懿9 小时前
【架构师从入门到进阶】第七章:缓存和存储的优化思路——第一节:缓存概述
数据结构·数据库·分布式·缓存·架构·系统架构·1024程序员节