周赛:将区间分为最少组数

646. 最长数对链

6178. 将区间分为最少组数

 

本次周赛的第三题 将区间分为最少组数 和某一天的每日一题 最长数对链 很像!!

这里给出三种思路:「贪心 + 堆」「线段树」「差分数组」

贪心 + 堆

首先排个序:先按照left排序,如果相同,再按right排序

堆中存放着每一个分组中结尾元素值,即分组的最大元素值

对于上述第二种情况,举个简单的例子

假设当前堆中元素为:2 5 8 15,其中 2 为堆顶,此时要加入区间[10, 20],可以接在 2 后面,也可以接在 5 或 8 后面,效果都是等价的

如果接在 5 后面,后续区间左边界一定 >= 10,所以后续区间一定可以接在 2 或 8 后面

为了方便处理,每次都接在堆顶元素后面即可!!

线段树

关于线段树的详解可见 线段树详解 🔥🔥🔥

如果使用线段树去解决,可以直接套模版,详解中有详细说明!!这里是关于「区间最值」的线段树类型

本题直接转换成计算区间重叠的最大高度,如下图所示高度为 3:

8

差分数组

关于差分数组的详解可见 差分数组 🔥🔥🔥

在前一种线段树方法中,直接转换成计算区间重叠的最大高度,那么我们也可以利用「差分数组」计算出每个区间的重叠高度