56. 合并区间

给定一个区间的集合,合并重叠的区间,并返回与原集合范围一致的、区间不重叠的区间集合。
思路:排序后,从左向右逐个判断是否重叠,若重叠则合并,直至到达最后一个区间。
重叠判据:(已按左边界排序后)i=left_j
合并区间:left_i=min(left_i, left_j) right_i=max(right_i, right_j)

57. 插入区间

给定一个有序区间的集合和一个新插入的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
思路:由于已经排序,因此从左向右逐个确定区间。与56. 合并区间 类似,不同之处在于当新插入的区间已经定好位置后,就不需要在进行 重叠区间的判断,因此用一个变量isPlaced标识新插入区间是否做好了合并工作并且已经就位。

435. 无重叠区间

给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。题目等价于找最多的不重叠的区间数量。
思路一:贪心算法
从左向右逐渐确定最优解。如果左区间的右边界越小,越可能有更多的不重叠区间解。因此,以区间右端点为依据进行升序排序,从左向右逐个确定待选区间,并更新已选区间集合的右边界,待选区间的标准是,所有满足左边界>=已选区间右边界的区间中,右边界最小的区间。
思路二:动态规划
f[i]代表以第i个区间结尾的最多不重叠区间的数量,因此有状态转移过程:f[i]=max(f[j])+1; 其中j<i && r[j]<=l[i]。需要对区间进行排序,依据是左边界的大小。

共同点:

排序、从左至右逐个确定区间、区间重叠与合并的准则