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

BM89 合并区间

BM89 合并区间

题目描述

给出一组区间,请合并所有重叠的区间。

请保证合并后的区间按区间起点升序排列。

//"区间"定义
class Interval {int start; //起点int end;   //终点
}

数据范围:区间组数 0≤n≤2×1050≤n≤2×105,区间内 的值都满足 0≤val≤2×1050≤val≤2×105

要求:空间复杂度 O(n)O(n),时间复杂度 O(nlogn)O(nlogn)

进阶:空间复杂度 O(val)O(val),时间复杂度O(val)O(val)

示例1

输入:

[[10,30],[20,60],[80,100],[150,180]]

返回值:

[[10,60],[80,100],[150,180]]

示例2

输入:

[[0,10],[10,20]]

返回值:

[[0,20]]

注意

这道题的示例有些误导,看到的可能都是由小到大的排序,所以在编码的时候考虑的不会很全面

例如:输入:[[100, 200], [10,50], [50,90]]

所以我们应该对输入的数据按,照数组的第一个元素大小进行排序!

#include <vector>
#include <algorithm>struct Interval {int start;int end;Interval(int s, int e) : start(s), end(e) {} 
};class Solution {
public:vector<Interval> merge(vector<Interval>& intervals) {if (intervals.size() <= 1) return intervals;  // 这里如果输入的数据只有一个,那么显然输出本身// 重点:先按起始点排序sort(intervals.begin(), intervals.end(), [](const Interval& a, const Interval& b) {return a.start < b.start; // 由小到大});vector<Interval> result;int current_start = intervals[0].start;int current_end = intervals[0].end;for (int i = 1; i < intervals.size(); ++i) {// 当前区间的起始节点小于等于上一个区间节点的end值,说明有重叠,那么需要合并重叠区间if (intervals[i].start <= current_end) {// 有重叠,合并区间current_end = max(current_end, intervals[i].end);} else {// 无重叠,添加当前区间result.emplace_back(current_start, current_end);current_start = intervals[i].start;current_end = intervals[i].end;}}// 添加最后一个区间result.emplace_back(current_start, current_end);return result;}
};
http://www.lryc.cn/news/612105.html

相关文章:

  • Diamond基础1:认识Lattice器件
  • 三维偏序 -- cdq 套 cdq
  • 一文读懂:什么是CLIP
  • 目录遍历漏洞学习
  • 560. 和为 K 的子数组 - 前缀和思想
  • kubeadm-k8s 中的 etcd 备份与恢复
  • Nginx 跨域(CORS)配置详细介绍
  • 【教程】C++编译官方CEF3
  • [Oracle] NVL()函数
  • Python:文件管理
  • 玳瑁的嵌入式日记D13-0806(C语言)
  • 【运维进阶】DHCP服务配置和DNS域名解析
  • TypeScript ActionScript
  • 浅谈RNN被Transformer 取代的必然性
  • Kotlin Native调用C curl
  • Uniapp生物识别(SOTER)
  • 【第5话:相机模型1】针孔相机、鱼眼相机模型的介绍及其在自动驾驶中的作用及使用方法
  • 第二十六天(数据结构:树(补充版程序请看下一篇))
  • 数字图像处理(冈萨雷斯)第三版:第四章——空间滤波与频域滤波(平滑与锐化)——主要内容和重点
  • 【PHP 抽象类完全指南(含 PHP 8.4 新特性)】
  • 02.【数据结构-C语言】顺序表(线性表概念、顺序表实现:增删查、前向声明、顺序表实现通讯录项目:增删改查、通讯录数据导入及保存到本地文件)
  • Linux操作系统启动项相关研究与总结
  • Redis面试精讲 Day 12:Redis Sentinel哨兵机制详解
  • 深度学习(pytorch版)前言:环境安装和书籍框架介绍
  • 单变量单步时序预测:CNN-GRU卷积神经网络结合门控循环单元
  • Linux系统编程——环境变量、命令行参数
  • mysql8.0主从节点克隆
  • Numpy科学计算与数据分析:Numpy入门之多平台安装与基础环境配置
  • 用NAS如何远程访问:详细教程与实用技巧
  • 强强联合:OpenAI正式登陆AWS!