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

[Algorithm][贪心][合并区间][无重叠区间][用最少数量的箭引爆气球]详细讲解

目录

  • 1.合并区间
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 2.无重叠区间
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 3.用最少数量的箭引爆气球
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现


1.合并区间

1.题目链接

  • 合并区间

2.算法原理详解

  • 区间问题思路
    • 排序
      • 左端点(本题)
      • 右端点
    • 根据排序后的结果,总结规律
  • 解法:排序(左端点) + 贪心
    • 性质能够合并的区间,都是连续的
    • 如何合并?
      • 求并集
        请添加图片描述

3.代码实现

vector<vector<int>> merge(vector<vector<int>>& intervals) 
{// 排序sort(intervals.begin(), intervals.end());// 合并区间vector<vector<int>> ret;int left = intervals[0][0], right = intervals[0][1];for(int i = 0; i < intervals.size(); i++){int a = intervals[i][0], b = intervals[i][1];if(a <= right) // 有重叠{right = max(right, b);}else // 无重叠{ret.push_back({left, right});left = a;right = b;}}// 最后一个区间ret.push_back({left, right});return ret;
}

2.无重叠区间

1.题目链接

  • 无重叠区间

2.算法原理详解

  • 解法:排序(左端点) + 贪心
  • 问题转化:移除最少区间 <–> 保留更多区间
    • 优先干掉右端点长的区间 --> 长的区间更后续区间重叠的概率更大
      请添加图片描述

3.代码实现

int eraseOverlapIntervals(vector<vector<int>>& intervals) 
{// 排序sort(intervals.begin(), intervals.end());// 移除区间int ret = 0;int left = intervals[0][0], right = intervals[0][1];for(int i = 1; i < intervals.size(); i++){int a = intervals[i][0], b = intervals[i][1];if(a < right) // 有重叠{ret++; // DELETEright = min(right, b); // 贪心, 删除右端点较大的区间}else // 无重叠{right = b;}}return ret;
}

3.用最少数量的箭引爆气球

1.题目链接

  • 用最少数量的箭引爆气球

2.算法原理详解

  • 问题抽象:区间问题
  • 问题转化:最少的弓箭数量 --> 一只箭应该引爆更多的气球 --> 将互相重叠的所有区间都拿出来引爆
  • 解法:排序(左端点) + 贪心
    • 性质:按照左端点排序之后,互相重叠的区间是连续的(约束更强)
    • 如何合并?
      • 求交集
        请添加图片描述

3.代码实现

int findMinArrowShots(vector<vector<int>>& points) 
{// 排序sort(points.begin(), points.end());// 求互相重叠区间的数量int right = points[0][1];int ret = 1;for(int i = 1; i < points.size(); i++){int a = points[i][0], b = points[i][1];if(a <= right) // 有重叠{right = min(right, b);}else // 无重叠{ret++;right = b;}}return ret;
}

http://www.mrgr.cn/news/44994.html

相关文章:

  • 数据结构 ——— 相交链表(链表的共节点)
  • CART回归树中的 方差减少量 计算步骤和示例
  • Ancient City Ruins 古代城市遗址废墟建筑游戏场景
  • 在数据中,如何删除表中的记录?
  • Cesium的一些神奇概念及技术流程(1)
  • 告别音乐小白!字节跳动AI音乐创作工具,让你一键变作曲家!
  • linux下cmake编译64位,32位,ARM,ARM64程序
  • 什么是 JavaScript 的数组空槽
  • 请散户股民看过来,密切关注两件大事
  • 机器学习——自监督学习与无监督学习
  • 父子进程之间关于对全局变量的修改同步问题
  • c++包管理工具conan
  • 【超详细】基于YOLOv11的PCB缺陷检测
  • RK3568笔记六十四:SG90驱动测试
  • 数据校验的总结
  • 【C语言】自定义类型:结构体
  • 国庆期间的问题,如何在老家访问杭州办公室的网络呢
  • 【AI知识点】激活函数(Activation Function)
  • 基于LORA的一主多从监测系统_框架搭建
  • STM32 HAL 内部FLASH傻瓜式教程 各种型号单片机都适用主要解决网上例程HAL库无法写入问题