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

LeetCode刷题复盘笔记—一文搞懂贪心算法之56. 合并区间(贪心算法系列第十四篇)

今日主要总结一下可以使用贪心算法解决的一道题目,56. 合并区间

题目:56. 合并区间

Leetcode题目地址
题目描述:
以数组 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 <= 10^4
intervals[i].length == 2
0 <= starti <= endi <= 10^4

本题重难点

在这里插入图片描述
这道题主要就分为三种情况:

  1. 一个区间包含另一个区间
  2. 两个区间有交集
  3. 两个区间没有交集

写法一:

C++代码

class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int>> res;sort(intervals.begin(), intervals.end());for(int i = 0; i < intervals.size(); i++){int start = intervals[i][0], end = intervals[i][1];while(i < intervals.size() - 1 &&  end >= intervals[i + 1][0]){end = max(end, intervals[i + 1][1]);start = min(start, intervals[i + 1][0]);i++;}res.push_back({start, end});}return res;}
};

写法二:

class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int>> res;sort(intervals.begin(), intervals.end());res.push_back(intervals[0]);for(int i = 1; i < intervals.size(); i++){if(intervals[i][0] <= res.back()[1]){ // 出现重叠\// 合并区间// 此时由于已经按照左边界排好序,intervals[i - 1][0] 一定<intervals[i][0]// 所以只需要更新右边界res.back()[1] = max(res.back()[1], intervals[i][1]);}else{res.push_back(intervals[i]);}}return res;}
};

以上两种写法都可以,看哪个容易理解会写一种写法就行!


总结

这道题主要就分为三种情况:

  1. 一个区间包含另一个区间
  2. 两个区间有交集
  3. 两个区间没有交集

本文给出了两种写法,大家看哪个容易理解会写一种写法就行!
但这道题目本质上还是区间重叠问题的加强版,欢迎大家关注本人公众号:编程复盘与思考随笔(关注后可以免费获得本人在csdn发布的资源源码)

http://www.lryc.cn/news/12172.html

相关文章:

  • Andriod入门级开发
  • DCL 数据控制语言
  • 全网超详细的下载与安装VMware虚拟机以及为什么要安装VMware虚拟机
  • Python获取zabbix问题触发器
  • 原型链污染
  • ClickHouse详解
  • 02_Docker 安装
  • K8S集群将Docker切换到Containerd
  • Kubernetes03:kubernetes 功能和架构
  • LabVIEW中CPU和内存使用情况在NI分布式系统管理器中不可见
  • buu [NPUCTF2020]Classical Cipher 1
  • 分享96个HTML体育竞技模板,总有一款适合您
  • Python pandas「原有或者新建」Excel中「追加新或者新建」sheet
  • 程序员必备的软技能- CPU“没有灵魂的躯体”
  • 基于微信小程序的青少年生理健康知识小助手
  • 【scl】博图程序的导入和导出
  • 【C语言】指针进阶
  • 18:CTK 总结篇(FAQ)
  • 概论_第7章_参数估计_真题__求置信区间
  • Go 1.21的2个语言变化
  • Mysql(一)架构、存储引擎、数据结构
  • php 项目网站怎么实现负载均衡?
  • win11+pytorch1.7.0+python3.8(也可以是python3.7)+cuda11.0
  • 基于jeecgboot的flowable流程设计器的几个bug修复
  • SAP MM 配置变式物料
  • Quartz与SpringBoot 搞定任务调度
  • SciencePlots绘图
  • 【Spark分布式内存计算框架——Spark SQL】12. External DataSource(下)rdbms 数据
  • 【React】React入门--更改状态、属性、表单的非受控组件和受控组件
  • 0216-0218复习:继承