最大的不重叠区间数

2023-12-06  本文已影响0人  M_lear

问题:给定一个区间的集合 intervals ,其中 intervals[i] = [start_i, end_i] 。返回最大的不重叠区间的个数。

贪心解:将区间按右端点从小到大排序,从左向右遍历依次选择右端点最小且不与已选择的区间重叠的区间即可。

为什么可以贪心?
这个问题的最优解不唯一。

假设将其中的一个最优解从左往右排序,得到的区间序列为I_1,I_2,...,I_k
如果有一个区间I^{'}_1的右端点比I_1小,那么I^{'}_1,I_2,...,I_k同样是一组最优解。
如果有一个区间I^{'}_2的右端点比I_2小,且与I^{'}_1不重叠,那么I^{'}_1,I^{'}_2,...,I_k同样是一组最优解。
以此类推。

为什么按右端点排序?
因为我们习惯从左往右正序遍历。当然可以按左端点排序,那我们就要从右往左倒序遍历,依次选择左端点最大的区间。

上一篇下一篇

猜你喜欢

热点阅读