最大重叠区间数量

给你一个区间的数组 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;
}
相关推荐
I_belong_to_jesus13 小时前
C++关于分支预测的优化1
开发语言·c++·算法
Code_Solitude20 小时前
C语言动态内存 + 柔性数组 + 数组名退化
c语言·算法·柔性数组
上海潭龙东海科技有限公司20 小时前
客运站管控之动态孪生技术方案(新增一屏管控模块
数据仓库·人工智能·算法·重构·动态规划
YLCHUP1 天前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论
思麟呀1 天前
背包DP(01背包+完全背包)
c++·算法
笑容掩饰我的失落1 天前
区块链从小白到精通(七):Solidity 语法精讲——数据类型、函数、修饰器与事件
算法·区块链·php·智能合约·哈希算法
Pniubi1 天前
力扣24. 两两交换链表中的节点(递归)
算法·leetcode·链表
nice_lcj5201 天前
LRU 缓存入门:它是什么、怎么用、面试怎么手写
java·数据结构·缓存·面试·lru
꧁细听勿语情꧂1 天前
直接选择排序,堆排序,冒泡排序,递归快速排序、hoare版本、挖坑法、lomuto前后指针,非递归快速排序
c语言·开发语言·数据结构·算法