通俗易懂:贪心算法(二):区间问题 (力扣435无重叠区间)
看完本文,可以顺便解决leetcode以下题目:
435.无重叠区间(中等)
一、通俗易懂的 贪心算法 |思想 (重复一次~~~)
贪心算法就是采用贪心的策略,保证每一次的操作都是局部最优的,从而使得结果是全局最优的。
比如,A、B、C、都很喜欢吃橘子,A可以吃5个、B可以吃3个、C可以吃1个;但是现在只有7个橘子,问最多几个人可以吃饱;
我们选用的贪心策略就是,吃的少的人先吃,尽量先使用量少的人吃饱,所以在这里,B、C肯定是可以吃饱的;
在这里,又因为全局结果是局部结果的简单求和,因此,局部最优的策略同样也是全局最优的策略。
二、区间问题
435.无重叠区间(中等)
题目描述
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠
来源:力扣(LeetCode)
输入输出样例
输入: [ [1,2], [2,3], [3,4], [1,3] ]
输出: 1
解释: 移除 [1,3] 后,剩下的区间没有重叠。
来源:力扣(LeetCode)
题解
首先,我们能够看出来,重叠的判断条件是: 一号区间的区头 < 二号区间的区尾。;所以区尾的元素越小,可以留下来的区间数目就越多,自然移除的区间数目就更少了;
所以此题的贪心策略是:不能重叠,优先保留区尾的元素小的区间。
所以,我们第一步,应该对于当前的区间集合,做一个排序,按照各个区间区尾的值进行增序排序;然后进行判断,保留下来不重叠的区间,同时对于去除区间的操作进行计数;
class Solution {public:int eraseOverlapIntervals(vector<vector<int>>& intervals) {if (intervals.empty()) {return 0;}int n = intervals.size();// 首先是对当前的集合 做区尾增序处理sort(intervals.begin(),intervals.end(),[](vector<int>a,vector<int> b){return a[1] < b[1];});int total = 0;int prev = intervals[0][1];for (int i = 1; i < n; ++i) {if (intervals[i][0] < prev) { // 下一个区头比区尾小 说明和下一个重合了++ total;} else {prev = intervals[i][1]; // 继续下一个}}return total;}
};
通俗易懂:贪心算法(二):区间问题 (力扣435无重叠区间)相关推荐
- 力扣记录:贪心算法3较难(1)区间问题——55 跳跃游戏,45 跳跃游戏II,452 用最少数量的箭引爆气球,435 无重叠区间,763 划分字母区间,56 合并区间
本次题目 55 跳跃游戏 45 跳跃游戏II 452 用最少数量的箭引爆气球 435 无重叠区间 763 划分字母区间 56 合并区间 55 跳跃游戏 局部最优:不管每次跳多少步,取最大跳跃步数,若覆 ...
- 435. 无重叠区间
435. 无重叠区间 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触& ...
- 435. 无重叠区间(贪心算法)
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触",但没有相互 ...
- 2022-4-11 Leetcode 435.无重叠区间 —— 【贪心算法】
第一版,我本来打算是按照会议室的方式写的.每个房间放入连续的数组下标的序号.后来发现可能会出现同一个数组能够放入多个房间里,所以需要在每一轮开始前对房间进行排序. 本来自信慢慢的觉得自己能过,但是发现 ...
- LeetCode 435. 无重叠区间(贪心/动态规划)
文章目录 1. 题目 2. 解题 2.1 贪心 2.2 动态规划 1. 题目 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 ...
- 435. 无重叠区间(贪心经典题+思路+详解)
一:题目: 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触" ...
- LeetCode 435 无重叠区间
题目描述 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠.注意:可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触",但没 ...
- LeetCode 435. 无重叠区间 做题小结
题目 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠.注意:可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触",但没有相 ...
- Leetcode 435.无重叠区间 (每日一题 20210708 同类型题)
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠.注意:可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触",但没有相互重叠 ...
最新文章
- VLAN是什么?VLAN交换机端口类型有哪些?—Vecloud微云
- Automake十分钟速成教程
- dealloc时取weakself引起崩溃
- Less Css 教程
- 大家都在说的分布式系统到底是什么
- XML——XML概述
- 开放、普惠、高性能-SLS时序存储助力打造企业级全方位监控方案
- CSS盒子的三种类型(border-box、content-box)
- as3数据类型检查写法(is/as/typeof/in/instanceof)用法介绍
- usbcan系列便携式can分析仪
- 创业基础-乐训课堂-李家华-答案
- 计算机页面尺寸,网页页面尺寸一般设置多大才合适?
- 新版百元纸币下月发行!这些防伪你要知道
- Linux教程(第5版)习题部分习题及答案
- golang consul 观察者watch
- log4j2漏洞各大厂应对措施
- 基于cobra的go语言命令行解析器
- Ubuntu安装hp打印机
- Facebook Surround 360 使用说明
- 公务员中综合管理类和行政执法类有啥区别