当前位置: 首页 > news >正文

一维差分(扫描线)之区间重叠

参考资料来源灵神在力扣所发的题单,仅供分享学习笔记和记录,无商业用途。

核心思路:查看一维差分(扫描线)基础篇-CSDN博客

应用场景:差分仅适用于区间修改、最终查询或多次区间修改后单次查询的场景

56. 合并区间

题意:给定一个区间数组,将重叠区间重新构建,未重叠区间不做处理

思路:先按起点进行排序,后遍历保证当前区间的起点一定大于等于前一个区间的起点,判断前一个区间的终点是否大于等于当前区间的起点即可知道是否重叠,在判断哪个终点大重新更新结果即可。最终遍历使得重叠部分全部重构,不重叠区间不做修改

class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {//题意:给定一个区间数组,将重叠区间重新构建,未重叠区间不做处理//思路:先按起点进行排序,后遍历保证当前区间的起点一定大于等于前一个区间的起点,判断前一个区间的终点是否大于等于当前区间的起点即可知道是否重叠,在判断哪个终点大重新更新结果即可。最终遍历使得重叠部分全部重构,不重叠区间不做修改sort(intervals.begin(),intervals.end());vector<vector<int>> ans;for(auto&x:intervals){if(!ans.empty() && ans.back()[1]>=x[0]) ans.back()[1]=max(ans.back()[1],x[1]);else ans.push_back(x);}return ans;}
};

57. 插入区间

题意:给定一组升序区间数组和一个区间,要求按照升序插入区间数组并且有重叠部分必须合并区间。整个区间数组是没有重叠区间的

思路:先将区间插入数组,按照起点进行升序排序,思路同56最终将重叠区间进行合并完成

class Solution {
public:vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {//题意:给定一组升序区间数组和一个区间,要求按照升序插入区间数组并且有重叠部分必须合并区间。整个区间数组是没有重叠区间的//思路:先将区间插入数组,按照起点进行升序排序,思路同56最终将重叠区间进行合并完成intervals.push_back(newInterval);sort(intervals.begin(),intervals.end());vector<vector<int>> ans;for(auto&x:intervals){if(!ans.empty() && ans.back()[1]>=x[0]) ans.back()[1]=max(ans.back()[1],x[1]);else ans.push_back(x);}return ans;}
};

732. 我的日程安排表 III

题意:动态给定时间区间,要求统计从开始到现在所有的时间区间最大重叠区间个数

思路:采用差分哈希表进行区间标记,最后通过前缀和获得重叠区间最大个数

class MyCalendarThree {
public:map<int,int> m;MyCalendarThree() {}//题意:动态给定时间区间,要求统计从开始到现在所有的时间区间最大重叠区间个数//思路:采用差分哈希表进行区间标记,最后通过前缀和获得重叠区间最大个数int book(int startTime, int endTime) {int buff=0,ret=0;m[startTime]++;m[endTime]--;for(auto [x,y]:m){buff+=y;ret=max(ret,buff);}return ret;}
};/*** Your MyCalendarThree object will be instantiated and called as such:* MyCalendarThree* obj = new MyCalendarThree();* int param_1 = obj->book(startTime,endTime);*/

2406. 将区间分为最少组数

题意:给定一组区间数组给分割成多组,要求各个组中无重叠区间。求最小划分多少个组

思路:用差分哈希表标记重叠区间,将最大重叠区间数量视为划分多少个组,这样能确保组内无论如何搭配都不会出现重叠,也就是最小划分组数。

class Solution {
public:int minGroups(vector<vector<int>>& intervals) {//题意:给定一组区间数组给分割成多组,要求各个组中无重叠区间。求最小划分多少个组//思路:用差分哈希表标记重叠区间,将最大重叠区间数量视为划分多少个组,这样能确保组内无论如何搭配都不会出现重叠,也就是最小划分组数。map<int,int> m;for(auto&x:intervals){m[x[0]]++;m[x[1]+1]--;}int buff=0,ret=0;for(auto [x,y]:m){buff+=y;ret=max(ret,buff);}return ret;}
};
http://www.dtcms.com/a/396106.html

相关文章:

  • 电子商务网站怎么做二级子域名查询入口
  • 怎么查看网站虚拟空间wordpress中文编辑器插件安装
  • 17网站一起做网店新塘亚马逊关键词排名提升
  • 网站优化qq群南宁seo优势
  • 做电影网站失败了yeezy橙色
  • 硬件驱动——I.MX6ULL裸机启动(9)(RGBLCD相关设置)
  • php网站开发报告书wordpress手机主题mip
  • 济南教育论坛网站建设广州公司电商网站建设
  • MySQL索引原理解析:为什么选择B+树?
  • 手机网站解析域名电商网站制作成手机app
  • 自己网站怎么建设免费网站空间域名
  • 易企秀网站怎么做轮播图云南省建设厅网站
  • cms建站详细教程做网站如何大网页
  • 【Linux】系统部分——线程池的基本设计思路
  • 专业的家居行业网站制作视频素材网站推荐
  • C++第九篇:静态函数
  • 手机网站全屏代码莱芜都市网房产频道
  • 上海高品质网站建设公司揭阳东莞网站建设
  • Roo Code 的消息队列功能
  • Windows安全机制--模块执行防御
  • 网站开发 沈阳怎样查询江西省城乡建设厅网站
  • 导航网站备案河南网站推广那家好
  • 衡水网站优化最新远程网站建设服务器
  • 都匀网站开发的公司官方商城入口
  • 网站采用什么方法建设新春祝福图片在线制作
  • C++第六篇:对象的创建
  • 山东定制网站建设公司大型门户网站建设功能
  • 只做一种产品的网站省级建筑信息平台
  • ps做网站边框深圳的深圳的网站建设公司
  • 网站经常被黑宜昌最权威网站建设公司