题目出处LeetCode56合并区间
题目描述
给出一个闭区间的集合,请合并所有重叠的闭区间。
在给出具体的解题思路之前,我们先给出如何判断闭区间A[p1..r1]和闭区间B[p2..r2]是否重叠的方法,分直接法与间接法。(说明:题中只提到区间,但是依据题意,指的是闭区间,为了避免歧义和错误,我们应明确指出是区间还是闭区间。)
闭区间是否重叠
先给出直接法,如上图所示,闭区间A和闭区间B的所有重叠的情形都列举出来了 。按在数轴上的位置,给出闭区间端点大小关系,如下:
数学规律应该是简明如画的,通过列出端点大小的不等式链;我们得到,右端点一定大于等于左端点,也即右端点在数轴上的位置一定更右边(我们约定,数轴是向右增大的) 。用一句话概括就是右端点的最小值大于等于左端点的最大值,就能涵盖两区间重叠的四种情况了。下面再给出间接法:
有一句话叫做“正难则反”,意思是说当一个问题正面情况比较复杂时,我们先考虑所有的反面情况,然后做一个排除法就可以得到对全部正面情况的描述了。 概括判定闭区间A和闭区间B相离的方法,即闭区间B的左端点严格大于区间A的右端点或者闭区间A的左端点严格大于闭区间B的右端点。学习时,直接法和间接法应该同时掌握,解决具体问题时,当然是哪个简单用哪个了。