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

贪心 Leetcode 56 合并区间

合并区间

Leetcode 56

学习记录自代码随想录

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

示例 1:
输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:
输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

提示:
1 <= intervals.length <= 104
intervals[i].length == 2
0 <= starti <= endi <= 104

要点:1.排序,sort(intervals.begin(), intervals.end(), [](auto& a, auto& b){return a[0] < b[0];});使用lamda函数,此种排序方式谨记
2.如果前一个区间末尾>=后一个区间开始则将前一个区间末尾值改为前一个区间末尾值和后一个区间末尾值中的较大值;

class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int>> result;  // 一个结果数组存储输出// 排序,使用lamda函数,此种排序方式谨记sort(intervals.begin(), intervals.end(), [](auto& a, auto& b){return a[0] < b[0];});for(int i = 0; i < intervals.size(); i++){// 如果前一个区间末尾>=后一个区间开始则将前一个区间末尾值改为前一个区间末尾值和后一个区间末尾值中的较大值if(!result.empty() && result[result.size()-1][1] >= intervals[i][0]){result[result.size()-1][1] = max(result[result.size()-1][1], intervals[i][1]);}else{result.push_back(intervals[i]);}}return result;}
};

扩展:

#include <vector>
#include <iostream>
#include <unordered_map>
#include <algorithm>using namespace std;struct Period {int s; // 开始时间int e; // 结束时间
};class ActivityManagerBase {
public:virtual vector<Period> getModBusyPeriods(const string& mod) = 0;virtual bool addBusyPeriods(const string& mod, const Period& prd) = 0;
};class ActivityManager : public ActivityManagerBase{
private:unordered_map<string, vector<Period>> modPeriods;// 辅助函数,用于合并重叠的时段vector<Period> mergePeriods(vector<Period>& periods) {vector<Period> merged;for (const auto& period : periods) {if (!merged.empty() && merged.back().e >= period.s) {merged.back().e = max(merged.back().e, period.e);} else {merged.push_back(period);}}return merged;}
public:vector<Period> getModBusyPeriods(const string& mod) override{if(modPeriods.count(mod) == 0){return {};}return mergePeriods(modPeriods[mod]);}bool addBusyPeriods(const string& mod, const Period& prd) override{modPeriods[mod].push_back(prd);sort(modPeriods[mod].begin(), modPeriods[mod].end(),[](auto& a, auto& b){return a.s < b.s;});return true;}
};int main(){// 在C++中,抽象类是包含至少一个纯虚函数的类,它不能被实例化。// 在这个例子中,ActivityManagerBase 是一个抽象类,// 因为它有两个纯虚函数:getModBusyPeriods 和 addBusyPeriods。// 应该创建一个派生类(如 ActivityManager),// 并在派生类中实现所有的纯虚函数。然后,你可以创建派生类的对象。ActivityManager AM;vector<string> mods = {"m1", "m2", "m1", "m2"};vector<Period> prds = {{2,6}, {8,10}, {1,3}, {15,18}};for(int i = 0; i < mods.size(); i++){AM.addBusyPeriods(mods[i], prds[i]);}vector<Period> m1_periods = AM.getModBusyPeriods("m1");for(const auto& period : m1_periods){cout << '{' << period.s << ',' << period.e << '}';}return 0;
}

相关文章:

  • 算法复习之二分【备战蓝桥杯】
  • 无人机飞行控制系统技术,四旋翼无人机控制系统建模技术详解
  • docker通过dockerfile安装sftp教程。
  • React富文本编辑器开发(一)
  • 如何将一个远程git的所有分支推到另一个远程分支上
  • linux 如何给服务器批量做免密,如何批量挂在磁盘
  • React编写组件时,如何省略.tsx后缀
  • 30天自制操作系统(第23天)
  • 现代灰色系有质感的家,低调的高级感
  • office word保存pdf高质量设置
  • UniApp Vue 3 中的网络请求封装详解及用法
  • git代码上库流程(一篇就够了)
  • 十行代码开发一个AI应用
  • Linux Shell脚本练习(一)
  • WINDOWS内存管理 - 返回状态值
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • conda常用的命令
  • flask接收请求并推入栈
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • JavaScript 奇技淫巧
  • Java面向对象及其三大特征
  • js学习笔记
  • Node + FFmpeg 实现Canvas动画导出视频
  • sessionStorage和localStorage
  • SpingCloudBus整合RabbitMQ
  • Sublime Text 2/3 绑定Eclipse快捷键
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Vue组件定义
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 回顾2016
  • 基于axios的vue插件,让http请求更简单
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 手写一个CommonJS打包工具(一)
  • 微信开源mars源码分析1—上层samples分析
  • 我与Jetbrains的这些年
  • 正则与JS中的正则
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​linux启动进程的方式
  • ​如何防止网络攻击?
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #NOIP 2014#Day.2 T3 解方程
  • $jQuery 重写Alert样式方法
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (第27天)Oracle 数据泵转换分区表
  • (九)c52学习之旅-定时器
  • (一) springboot详细介绍
  • (一)为什么要选择C++
  • (转)visual stdio 书签功能介绍
  • (转)大型网站架构演变和知识体系
  • .NET MVC 验证码
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)