本文共 1133 字,大约阅读时间需要 3 分钟。
为了解决这个问题,我们需要找到最小的移除数量,使得剩下的区间互不重叠。我们可以使用贪心算法来解决这个问题,具体步骤如下:
这种方法的时间复杂度主要是排序的时间复杂度 O(n log n),其中 n 是区间的数量。遍历的时间复杂度是 O(n),因此整体复杂度为 O(n log n),能够高效地处理问题。
#include#include using namespace std;int eraseOverlapIntervals(vector >& intervals) { if (intervals.empty()) return 0; sort(intervals.begin(), intervals.end(), [](const vector & a, const vector & b) { return a[1] < b[1]; }); int n = intervals.size(); int right = -1; int count = 0; for (const auto& interval : intervals) { if (interval[0] >= right) { right = interval[1]; count++; } } return n - count;}
sort 函数对区间列表进行排序,排序依据是区间的右端点。right 用于记录当前保留的区间的右端点,初始化为 -1。count 用于记录保留的区间数量,初始化为 0。right。如果是,说明该区间不与已保留的区间重叠,可以保留,并更新 right 为该区间的右端点,同时增加 count。这种方法确保了我们以最优的方式选择区间,移除尽可能少的区间,从而得到一个互不重叠的区间集合。
转载地址:http://cvkj.baihongyu.com/