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

贪心算法解决区间问题:合并、选点、覆盖、最大不相交

一、前言区间问题是贪心算法中的高频考点而贪心算法是解决这类问题的 “黄金搭档”。本文将系统讲解基于贪心算法的四类经典区间问题区间合并、区间选点、区间覆盖、最大不相交区间数量帮助你彻底掌握这类问题的解题思路。二、核心思想贪心算法的本质贪心算法的核心是每一步都做出局部最优的选择从而希望最终得到全局最优解。对于区间问题贪心策略的关键在于对区间进行合理排序(通常按照左端点右端点排序)每一步选择当前最优的区间三、经典区间问题详解3.1 区间合并问题描述给定n个区间集合intervalsn[l,r],请你合并所有重叠的区间并返回一个不重叠的区间数组该数组需恰好覆盖输入中的所有区间。例如输入:intervals{[1,2],[1,3],[2,3],[3,4],[6,8]}输出{[1,4],[6,8]}解题思路如果我们讲输出的数组作为res,那么res一开始为空我们选择讲区间的左端点升序排序。遍历加入res中这样res的最右端点(res最后一个区间的右端点maxR)作为判断依据如果要加入的区间的左端点l大于maxR,那么他与res的所有区间不重叠res将其加入否则存在重叠maxRmax(maxR,区间的右端点).算法模板vectorvectorint merge(vectorvectorint intervals) { int nintervals.size(); if(intervals.size()0)return {}; sort(intervals.begin(),intervals.end()); vectorvectorint merged; for(int i0;in;i){ int Lintervals[i][0];int Rintervals[i][1]; if(!merged.empty()Lmerged.back()[1]){ merged.back()[1]max(merged.back()[1],R); } else{ merged.emplace_back(vectorint({L,R})); } } return merged; }实战56. 合并区间 - 力扣LeetCode57. 插入区间 - 力扣LeetCode3.2区间选点问题描述给定若干区间选择最少的点使得每个区间至少包含一个点。例如 intervals{[1,2,2],[2,4,2],[1,4,3]}[l,r,num],,[l,r]是区间num是要求从区间选择的数字数量解题思路将区间右端点排序选第一个区间的右端点作为第一个点从右往前选数字这样能保证后面排序的区间内已经覆盖的点数最多可以抽象的理解区间A为了让后面区间B少选些点,尽量可能在区间B可能会覆盖的区间(就是从A区间从右往左)选择点后续区间遍历比如区间A[2,7,2]里7,6,被选择了B[4,8,4],由于7,6,已经选择选择4和8代码模板int minPoints(vectorvectorint intervals) { // 按右端点排序 sort(intervals.begin(), intervals.end(), [](const vectorint a, const vectorint b) { return a[1] b[1]; }); // 找到最右端的坐标方便标记点 int maxR 0; for (auto interval : intervals) { maxR max(maxR, interval[1]); } vectorbool used(maxR 1, false); // 标记某个点是否已被选 int totalPoints 0; for (auto interval : intervals) { int l interval[0]; int r interval[1]; int need interval[2]; // 统计区间内已选的点数 int cnt 0; for (int pos l; pos r; pos) { if (used[pos]) cnt; } // 如果还不够从右往左补点 if (cnt need) { int left need - cnt; for (int pos r; pos l left 0; pos--) { if (!used[pos]) { used[pos] true; cnt; left--; totalPoints; } } } } return totalPoints; }实战P1250 种树 - 洛谷P1325 雷达安装 - 洛谷3.3 区间覆盖问题描述一个目标区间[0, target]和n个候选区间要求选择最少的候选区间使其完全覆盖目标区间。例如 [0,20]是目标区间候选区间有[0,10],[5,15],[10,20]解题思路候选区间左端点排序维护一个已经选择的右端点maxR,在所有满足候选区间的左边界maxR里选择右端点最大的更新maxR,直到覆盖目标区间int minCover(vectorvectorint intervals, int target) { // 1. 按左端点排序 sort(intervals.begin(), intervals.end()); int res 0; int curEnd 0; // 当前已覆盖到的最右位置 int i 0; int n intervals.size(); while (curEnd target) { int maxNext curEnd; // 在能选的区间中能达到的最远右端点 // 2. 在所有左端点 curEnd 的区间中选右端点最大的 while (i n intervals[i][0] curEnd) { maxNext max(maxNext, intervals[i][1]); i; } // 3. 如果无法延伸说明覆盖失败 if (maxNext curEnd) { return -1; } // 4. 使用这个区间更新覆盖范围 curEnd maxNext; res; } return res; }实战1326. 灌溉花园的最少水龙头数目 - 力扣LeetCode3.4最大不相交区间问题描述给定若干区间选择最多数量的区间使得这些区间互不相交。例如{[1,3],[1,2],[2,3],[3,4]}中选择{[1,2],[2,3],[3,4]}解题思路与区间选点思路一样按区间右端点升序排序选第一个区间然后依次选择与已选区间不相交的区间代码模板int eraseOverlapIntervals(vectorvectorint intervals) { if (intervals.empty()) return 0; // 按右端点排序 sort(intervals.begin(), intervals.end(), [](const vectorint a, const vectorint b) { return a[1] b[1]; }); int count 1; // 至少可以选第一个区间 int lastEnd intervals[0][1]; for (int i 1; i intervals.size(); i) { // 如果当前区间左端点 上一个选中区间的右端点说明不重叠 if (intervals[i][0] lastEnd) { count; lastEnd intervals[i][1]; } // 否则重叠跳过当前区间即移除它 } // 返回需要移除的区间数量 总数 - 最多保留数 return intervals.size() - count; }实战435. 无重叠区间 - 力扣LeetCode

相关文章:

贪心算法解决区间问题:合并、选点、覆盖、最大不相交

一、前言 区间问题是贪心算法中的高频考点,而贪心算法是解决这类问题的 “黄金搭档”。本文将系统讲解基于贪心算法的四类经典区间问题:区间合并、区间选点、区间覆盖、最大不相交区间数量,帮助你彻底掌握这类问题的解题思路。 二、核心思想…...

16.2【保姆级教程】 C语言八进制+十六进制保姆级详解 _ 底层开发必吃透

🔥C语言八进制十六进制保姆级详解 | 底层开发必吃透📢 关注博主不迷路!全网最细C语言八进制、十六进制教程,从定义到实操、从转换到应用,新手零门槛上手,底层开发/面试必看!在C语言底层开发中&a…...

linux入门第六章,cp复制、mv移动,rm删除

我把centOS安装上了,后续就用centOS来讲课,他和kali都是linux,效果一样的cp指令小伙伴们不要一看到cp两个字就说cpdd,这里的cp是复制的意思,英语是copy,语法是: cp [-r] 原文件,目标…...

容器编排:Docker Compose与Kubernetes的适用场景

容器编排:Docker Compose与Kubernetes的适用场景 在容器化技术蓬勃发展的今天,容器编排工具的选择直接影响着应用的部署效率、运维复杂度和系统稳定性。Docker Compose与Kubernetes作为两大主流工具,分别在单机环境与分布式集群领域展现出独特优势。本文将结合真实项目经验…...

STM32H7 SPI4 FLASH HAL库配置优化实践

1. STM32H7 SPI4与FLASH通信基础 最近在做一个基于STM32H743IIT6的项目时,遇到了SPI4与FLASH通信的配置问题。SPI4工作在50MHz的高时钟频率下,调试过程中发现了一些有趣的细节。比如分频系数低于SPI_BAUDRATEPRESCALER_8时读取就会失败,而高于…...

NomNom存档编辑器:3分钟掌握《无人深空》终极修改秘籍

NomNom存档编辑器:3分钟掌握《无人深空》终极修改秘籍 【免费下载链接】NomNom NomNom is the most complete savegame editor for NMS but also shows additional information around the data youre about to change. You can also easily look up each item indi…...

魔兽争霸3性能优化与显示修复完整教程:3步实现完美游戏体验

魔兽争霸3性能优化与显示修复完整教程:3步实现完美游戏体验 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3的卡顿、界面异…...

保姆级教程:用Python和Paho-MQTT库5分钟搭建你的第一个物联网通信Demo

5分钟实战:用PythonPaho-MQTT构建物联网通信原型 在智能家居设备突然向你手机推送报警消息时,在共享单车锁车后立即完成计费时,背后都是MQTT协议在高效运作。作为物联网领域的"HTTP协议",MQTT凭借其轻量级和发布/订阅模…...

GCC扩展语法在嵌入式开发中的高效应用

1. GCC扩展语法深度解析在嵌入式开发领域,GCC编译器因其强大的功能和灵活的扩展特性而广受欢迎。作为一名长期从事嵌入式系统开发的工程师,我发现掌握GCC的扩展语法能显著提升代码效率和可维护性。今天我将分享几个在实际项目中特别实用的GCC扩展语法特性…...

颠覆式网盘直连提取革新:ctfileGet让高速下载成为现实

颠覆式网盘直连提取革新:ctfileGet让高速下载成为现实 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 副标题:突破下载限速困境,3步实现城通网盘直链高效提取 ctfil…...

IM023-将PDF文件导出jpg图片到PDF所在目录下

批量将pdf文档每页导出为jpg图片 比如A文件夹下有B、C、D、E....等文件夹,每个文件夹下都有一定的pdf文件,将程序放在A文件夹下,运行程序后会将B、C、D、E....等文件夹下每个pdf文件分别导出为jpg图片,导出的jpg图片命名方式为&am…...

喜马拉雅音频下载器终极指南:快速批量下载VIP有声小说与付费专辑

喜马拉雅音频下载器终极指南:快速批量下载VIP有声小说与付费专辑 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 你是否…...

从产品到生态:观远数据的一站式智能分析平台之路

开篇:客户现场的真实发问 上个月在华东某快消头部企业的CIO圆桌会上,负责数字化转型的副总裁问了我一个很尖锐的问题: “你们BI厂商总说一站式,但我前几年买的BI工具,最后要么数据接不上要额外买数仓工具,要…...

直接上干货,这个方案最香的就是省掉PLC还能玩转两台变频器。实测施耐德ATV312配MCGS屏的RTU通讯稳得一批,咱们先从最关键的接线开整

mcgs rtu方式通讯两台施耐德ATV312变频器示例 ,通讯实现触摸屏控制监控变频器,中间不需要plc,功能多而且使用方便,关键还节约成本。 所需硬件:施耐德atv312变频器,mcgs触摸屏(没屏也可,电脑在线…...

020驱动模型与sysfs:当你的驱动需要“见人”时

最近在调试一个车载CAN设备时遇到个怪现象:驱动能正常收发数据,但每次系统休眠唤醒后设备就丢了。查了半天发现,原来设备电源管理回调根本没被调用。老张路过我工位瞟了一眼,扔下一句话:“你这驱动没‘上户口’吧&…...

革新性植物大战僵尸辅助工具:PVZ Toolkit全方位功能解析

革新性植物大战僵尸辅助工具:PVZ Toolkit全方位功能解析 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit PVZ Toolkit是一款专为《植物大战僵尸》PC版设计的革新性辅助工具,集…...

019驱动调试与性能优化:printk、动态调试、ftrace、perf工具链

从一次诡异的I2C超时说起 上周排查一个车载IVI系统的触摸屏失灵问题,现象是冷启动后触摸完全无响应,但系统日志里没有任何错误信息。用逻辑分析仪抓I2C波形发现,主机发了START信号后SCL就被拉低了——典型的从设备忙状态。但驱动代码里对应的…...

猫抓资源嗅探扩展完整配置指南:从零开始掌握网页资源捕获

猫抓资源嗅探扩展完整配置指南:从零开始掌握网页资源捕获 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为无法下载网页视频而烦恼…...

OpenClaw异常处理指南:千问3.5-35B-A3B-FP8任务失败的8种排查方法

OpenClaw异常处理指南:千问3.5-35B-A3B-FP8任务失败的8种排查方法 1. 当OpenClaw遇上千问3.5:我的踩坑起点 上周三凌晨2点,我正试图用OpenClaw自动整理一批会议录音转写的文本。这个任务需要先调用千问3.5-35B-A3B-FP8模型提取关键信息&…...

3dsconv:任天堂3DS游戏格式转换的全流程解决方案

3dsconv:任天堂3DS游戏格式转换的全流程解决方案 【免费下载链接】3dsconv Python script to convert Nintendo 3DS CCI (".cci", ".3ds") files to the CIA format 项目地址: https://gitcode.com/gh_mirrors/3d/3dsconv 问题导入&…...

Boost电路与SMC滑模控制策略:文章复现及性能优化探讨

boost电路,smc滑模控制,文章复现Boost电路在电力电子里算是老熟人了,但真要玩转它的闭环控制可不容易。最近在复现一篇用滑模控制(SMC)搞Boost电路的论文,实测发现这货对付负载突变确实有两把刷子。今天咱们…...

VS Code官宣:全面支持Rust!

当"宇宙第一编辑器"遇上"内存安全的叛逆少年",这场联姻比想象中更甜~最近微软悄悄放了个大招:VSCode 要深度集成 rust-analyzer 了! 🎉 什么意思呢?以前你用 VSCode 写 Rust&#xff0…...

DENSO电装机器人软件授权序列号 wincaps3软件授权和软件安装包及软件手册

DENSO电装机器人软件授权序列号 wincaps3软件授权和软件安装包及软件手册 永久使用序列号 给机器人工程师的WinCaps3安装避坑指南 最近在调试DENSO机械臂的时候,发现不少同行在WinCaps3的安装和授权环节翻车。今天就结合自己的踩坑经验,聊聊怎么搞定这个…...

改进蚁群算法结合Dijkstra与MAKLINK图理论实现二维空间最优路径规划

【改进蚁群算法】/蚁群算法/Dijkstra算法/遗传算法/人工势场法实现二维/三维空间路径规划 本程序为改进蚁群算法Dijkstra算法MAKLINK图理论实现的二维空间路径规划 算法实现: 1)基于MAKLINK图理论生成地图,并对可行点进行划分; 2…...

AI赋能前端开发:让快马平台智能生成仪表盘页面架构与代码

最近在做一个数据可视化项目时,遇到了一个典型的前端开发需求:需要快速搭建一个专业级的仪表盘页面。这个页面需要包含数据概览卡片、图表展示区和用户留言列表三大核心模块。作为一个独立开发者,既要考虑UI美观度,又要兼顾代码质…...

深入理解 C# 架构思维:继承的界限、多态的解耦与属性的封装

C#学习笔记面向对象编程:继承什么是继承继承的语法方法的重写构造函数的重载与 base 关键字动物世界完整实例踩坑汇总面向对象编程:多态多态的实现步骤踩坑汇总面向对象编程:封装核心套路:私有字段 公开属性代码实例踩坑汇总面向…...

新手福音:用claude code和快马平台开启你的Python编程第一课

最近在帮朋友入门Python编程时,发现很多新手都会遇到类似的问题:看教程时觉得简单,但自己动手写代码就无从下手。经过几次尝试,我发现用InsCode(快马)平台结合claude code生成的教学项目,能很好地解决这个痛点。下面分…...

科技信息最前沿——TurboQuant:以极致压缩重新定义人工智能效率

谷歌TurboQuant技术突破:高效压缩AI内存需求谷歌TurboQuant技术通过创新的免训练压缩方法,有效解决了大语言模型面临的内存瓶颈问题。该技术采用两阶段压缩方案:PolarQuant极坐标量化和QJL误差修正,在不损失精度的前提下实现显著优…...

体验ai辅助开发:在快马平台与ai协作构建智能任务管理应用

最近尝试用AI辅助开发了一个任务管理应用,整个过程就像有个经验丰富的编程伙伴在旁边随时提供建议。在InsCode(快马)平台上,这种协作体验特别流畅,分享下具体实现过程: 初始框架搭建 输入"创建一个Vue3任务列表应用&#xff…...

(97页PPT)DG华为流程管理全景从定位到优化的高效增长策略(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 https://download.csdn.net/download/AI_data_cloud/89624196 资料解读:《(97页PPT)DG华为流程管理全景从定位到优化的高效增长策略》 详细资料请看本解读文章…...