最大重叠区间数量

给你一个区间的数组 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;
}
相关推荐
镜像视界(浙江)科技有限公司1 小时前
《视频孪生之上:二维展示终结,三维空间计算重构城市逻辑》——跨摄像连续表达 × 三角测量厘米级定位 × 动态轨迹建模,构建新一代城市空间
大数据·人工智能·算法·矩阵·音视频·空间计算
a187927218312 小时前
【算法】双指针与滑动窗口(二):滑动窗口——吃进、判定、吐出
算法·leetcode·双指针·滑动窗口·原理·模板·算法讲解
铭哥的编程日记2 小时前
从一道 LeetCode Hard 到吃透一类题:加权区间调度「排序 + 二分 + DP」
算法·leetcode·职场和发展
Logic1012 小时前
C语言/数据结构字符串题解:找出DNA序列中未配对的独特序列——排序+遍历(O(nlogn))
c语言·数据结构·字符串·数组·排序·时间复杂度·算法题
Navigator_Z2 小时前
LeetCode //C - 1248. Count Number of Nice Subarrays
c语言·算法·leetcode
wzdark3 小时前
基于链表的内存池设计与内存复用机制4
java·数据结构·链表
wzdark3 小时前
多维数组在算法设计中的存储映射问题4
算法
Phil3234 小时前
多智能体不是越多越好:Google《Towards a Science of Scaling Agent Systems》论文深度解读
算法
6Hzlia4 小时前
【Classic 150 刷题计划】 LeetCode 26. 删除有序数组中的重复项 | C++ 快慢双指针经典模板
c++·算法·leetcode