![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
区间问题
文章平均质量分 54
seez
njfu
展开
-
leetcode 56. 合并区间(区间,贪心)
数组的长度是10^4,所以应该使用O(N)的做法题意:所有重叠的区间应该合并成一个区间,最后返回所有合并完后的区间这题不可以使用右端点升序排序,应该使用左端点升序排序如图所示我们知道,右端点的升序排序会导致next区间会完全大于当前区间,如果采用右端点升序排序,最后的结果是返回4个区间!不是最优解,这是因为小区间和区间之间有断点,那么,我们应该选用一种排序,让4这个大区间在前面,那么就是选择左端点升序排序了!!左端点升序排序,可能会出现2一样的比当前区间完全小的区间,那么不应该...原创 2022-01-01 18:39:19 · 476 阅读 · 0 评论 -
112. 雷达设备(区间选点)
题目分析过程 1.寻找性质,转化模型 2.求解模型问题转变为区间问题905 区间选点_qq12323qweeqwe的博客-CSDN博客等价于求最少区间选点首先,先把所有的区间都算出来for (int i = 0;i < n;i++) { int x, y; cin >> x >> y; //计算区间 if (y > d) flag = true; //一个点的...原创 2021-12-26 15:00:52 · 304 阅读 · 0 评论 -
127. 任务(贪心,二维区间选点问题)
分析:由于每一次收益是 500*x+2*y,500》》2,所以应该是以工作时间为第一关键字,任务难度为第二关键字排序那么要怎么贪心呢?1.先让任务按照时间降序排序注意这里第二个关键字也要降序排序2.由于x是第一关键字,y是第二关键字,不妨在所有满足条件的机器中选择任务难度最低的机器(为什么?因为我们让时间按照降序排序,此时所有能够满足当前任务的机器时间,也一定能够满足后面所有任务的时间,根据贪心的思想优先选择任务难度最低的机器)3.把选中的机器在集合里面删去这里运用了集合..原创 2021-12-30 19:31:22 · 421 阅读 · 0 评论 -
111. 畜栏预定(贪心,区间分组)
贪心:按照左端点排序(开始吃草时间),每一次都寻找能放入的栅栏中,结束时间最早的一个#include <iostream>#include <algorithm>#include <queue>#define x first#define y secondusing namespace std;const int N = 1e5 + 5;struct node{ int l, r; int note; bool ope...原创 2021-12-30 12:18:01 · 285 阅读 · 0 评论 -
P4447 [AHOI2018初中组]分组
题目分析:要选出最小分组的最大值,而不是要选出最小的一个分组,那样的话答案必然只会是1所以我们要尽可能的让队伍组成,又要减少孤立点的出现贪心:在所以可以插入的队伍中,选择队伍长度最小的插入2.ac代码贪心+队列贪心+队列时间复杂度是O(nm)m是队伍组数其实就是在所有的组数中,寻找满足两个条件的组1.队长最小2.可以插入(上一个插入的数==当前数-1)#include <iostream>#include <algorithm&g...原创 2021-11-07 14:51:51 · 648 阅读 · 0 评论 -
110. 防晒(区间选点,贪心)
有几种贪心的策略,但是不一定正确,首先我们要检验他们的正确性1.min升序排序,选择满足条件的防晒中spf最小的2.min降序排序,选择满足条件的防晒中spf最大的3.max降序排序,选择满足条件的防晒中spf最大的1.min升序排序,选择满足条件的防晒中spf最小的首先这里不选择spf最大的是因为简单可证,升序排序选spf最大的,一般情况下都是会取到下一个成员唯一能取的防晒的,所以不合理接下来是min升序排序的验证我们发现,min升序排序是会遇到下一个区间(next)是...原创 2021-12-26 18:19:36 · 497 阅读 · 0 评论 -
907. 区间覆盖
题意:给定一个线段区间和多个闭区间,选择尽可能少的闭区间完全覆盖这个线段区间猜想:1.如果当前区间和线段区间有交集,再执行第二步 2.如果当前区间的左端点<=上一个选的区间的右端点,再执行第三步 3.所有满足1,2条件的区间中,选择一个右端点最大的区间,使其加入,重复1,2操作证明:A==最小操作数1.A>=最小操作数,显然2.A<=最小操作数最差情况:每一个区间的l==上一个区间的r证明成立#incl...原创 2021-12-15 17:20:19 · 1117 阅读 · 0 评论 -
906. 区间分组
思路:最小堆:存在最小的右端点数组:按照左端点从小到大排序求最多组数 :就是让每个区间单独作为一组,没有意义求最少组数:让尽可能多的区间放在一个组里面,如果实在找不到一个可以放入的组,就自己创造一个新组同类型怎么找到可以放入的组呢?1.先排好序,按照右端点从小到大放入(右端点:我们用左端点遍历,最小堆弹出的是最小的右端点,如果有交集就不用往下找了)2.数组排好序后,用左端点遍历(为什么是左端点?因为让区间从坐标轴从左到右遍历)3.如果r[i].l<=弹出的右端点,新...原创 2021-12-15 16:46:21 · 2182 阅读 · 0 评论